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

2024. 8. 19. 02:21·스터디/99클럽 코테 스터디 TIL

📝 문제

 

프로그래머스

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

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
'스터디/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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바