99클럽 코테 스터디 28일차 괄호 회전하기

2024. 8. 19. 02:21·스터디/99클럽 코테 스터디 TIL
목차
  1. 📝 문제
  2. 🔥 시도해본 접근 방식
  3. 1️⃣ 첫번째 시도
  4. ✨ 성공 코드

📝 문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

🔥 시도해본 접근 방식

1. 문자열s를 한 문자씩 잘라 Queue로 선언
2. Queue를 이용하여 맨 앞 문자를 뽑아서 뒤로 붙이는 방식으로 s의 길이만큼 s를 회전 시키는 반복문 선언
3. Queue에 있는 문자길이만큼 반복하는 반복문선언
4. 문자열의 문자 하나씩 Stack에 넣으면서 괄호가 모두 완성되면 answer를 1 증가시키고 괄호가 완성되지 않으면 문자열을 회전후 [3] 부터 재시도

 

1️⃣ 첫번째 시도

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

class Solution {
    public int solution(String s) {
        // 문자열의 맨 앞 문자를 뽑아서 뒤로 붙이는 방식으로 문자열을 회전시키기 위해 Queue 사용
        Queue<String> sQueue = new LinkedList<>();
        for (int i = 0; i < s.length(); i++) {
            sQueue.offer(String.valueOf(s.charAt(i)));
        }

        int answer = 0;

        // s의 길이만큼 s를 회전 시키는 반복문 선언
        for (int i = 0; i < s.length(); i++) {
            // sQueue를 복제
            Queue<String> tempQueue = new LinkedList<>(sQueue);

            Stack<String> tempStack = new Stack<>();

            for (int j = 0; j < s.length(); j++) {
                tempStack.push(tempQueue.poll());

                if (tempStack.peek().equals(")") || tempStack.peek().equals("}") || tempStack.peek().equals("]")) {
                    if (tempStack.size() < 2) {
                        break;
                    }

                    String u = tempStack.pop() + tempStack.pop();

                    if (!(u.equals(")(") || u.equals("}{") || u.equals("]["))) {
                        break;
                    }
                }

                // 정상적으로 반복문을 모두 마친 경우 +1
                if (j == s.length() - 1) {
                    answer++;
                }
            }

            // 문자열을 왼쪽으로 한칸 회전
            sQueue.offer(sQueue.poll());
        }

        return answer;
    }
}

 

한가지 케이스에서 실패가 떴다. 예외케이스가 있는듯 하다.

잘못된 조건식으로 인해 문자열이 "{{{" 와 같이 들어가면 카운트가 되는 결함을 발견하였다.

✨ 성공 코드

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

class Solution {
    public int solution(String s) {
        int answer = 0;

        if(s.length() == 1) return answer;

        // 문자열의 맨 앞 문자를 뽑아서 뒤로 붙이는 방식으로 문자열을 회전시키기 위해 Queue 사용
        Queue<String> sQueue = new LinkedList<>();
        for (int i = 0; i < s.length(); i++) {
            sQueue.offer(String.valueOf(s.charAt(i)));
        }

        // s의 길이만큼 s를 회전 시키는 반복문 선언
        for (int i = 0; i < s.length(); i++) {
            // sQueue를 복제
            Queue<String> tempQueue = new LinkedList<>(sQueue);

            Stack<String> tempStack = new Stack<>();

            for (int j = 0; j < s.length(); j++) {
                tempStack.push(tempQueue.poll());

                if (tempStack.peek().equals(")") || tempStack.peek().equals("}") || tempStack.peek().equals("]")) {
                    if (tempStack.size() < 2) {
                        break;
                    }

                    String u = tempStack.pop() + tempStack.pop();

                    if (!(u.equals(")(") || u.equals("}{") || u.equals("]["))) {
                        break;
                    }
                }

                // 정상적으로 반복문을 모두 마친 경우 +1
                if (j == s.length() - 1 && tempStack.size() == 0) {
                    answer++;
                }
            }

            // 문자열을 왼쪽으로 한칸 회전
            sQueue.offer(sQueue.poll());
        }

        return answer;
    }
}

'스터디 > 99클럽 코테 스터디 TIL' 카테고리의 다른 글

99클럽 코테 스터디 30일차 Find Right Interval  (0) 2024.08.21
99클럽 코테 스터디 29일차 Longest Increasing Subsequence  (0) 2024.08.19
99클럽 코테 스터디 27일차 할인 행사  (0) 2024.08.18
99클럽 코테 스터디 26일차 달리기 경주  (0) 2024.08.16
99클럽 코테 스터디 25일차 Evaluate Division  (0) 2024.08.16
  1. 📝 문제
  2. 🔥 시도해본 접근 방식
  3. 1️⃣ 첫번째 시도
  4. ✨ 성공 코드
'스터디/99클럽 코테 스터디 TIL' 카테고리의 다른 글
  • 99클럽 코테 스터디 30일차 Find Right Interval
  • 99클럽 코테 스터디 29일차 Longest Increasing Subsequence
  • 99클럽 코테 스터디 27일차 할인 행사
  • 99클럽 코테 스터디 26일차 달리기 경주
Been
Been
  • Been
    Been
    Been
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • 언어 (0)
        • Kotlin (0)
      • 안드로이드 (17)
      • iOS (3)
      • Git (1)
      • 스터디 (39)
        • 알고리즘 문제 풀이 (1)
        • 99클럽 코테 스터디 TIL (38)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    깃
    WRITE EXTERNAL
    코딩테스트준비
    쓰기권한
    FragmentStateAdapter
    AndroidID
    java
    개발자취업
    RecyclerView
    Android
    풀이실패
    Coroutines
    아이폰
    nsl
    EditText
    NSR
    안드로이드
    IOS
    밑줄제거
    maxWidth
    TIL
    객체변환
    99클럽
    Androiod
    자바
    언더라인 제거
    debugRuntimeClasspath
    항해99
    Git
    리싸이클러뷰
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Been
99클럽 코테 스터디 28일차 괄호 회전하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.