본문 바로가기

개발/알고리즘

[프로그래머스] Lv2. 괄호 회전하기

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/76502

 

프로그래머스

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

programmers.co.kr

풀이

먼저 괄호 쌍을 hashmap으로 만들어 둔 다음, stack을 사용해서 괄호 쌍이 맞는 지 확인한다.

 

느낀 점 & 기억 할 것

- 다른 사람 풀이를 보고 나서 깨달은 건데 StringBuilder를 쓰면 나처럼 concat이나 substring을 안써도 되고 실행 시간을 줄일 수 있을 것 같다.

- 요즘 오랜만에 알고를 풀기 시작 했더니 최적화나 가독성 따위 신경 쓰지 않고 코드를 쓰게 되는 것 같다. 너무 피곤한 정신 상태로 문제를 풀어서 그런 것도 있지만,,, 앞으로는 조금만 더 신경 쓰자 ㅠ,ㅜ

- String ➡️ Char `String.valueOf()`

정답 코드

더보기

import java.util.*;

class Solution {
    public int solution(String s) {
        int answer = 0;
        
        HashMap<Character, Character> map = new HashMap<>();
        
        map.put('(', ')');
        map.put('[', ']');
        map.put('{', '}');
        
        Stack<Character> check = new Stack<>();
        
        for(int c = 0; c < s.length(); c++) {
            s = s.concat(String.valueOf(s.charAt(0)));
            s = s.substring(1);
            
            for(int i = 0; i < s.length(); i++) {
                if(!check.isEmpty()) {
                    char value = check.peek();
                    if(map.containsKey(value) && s.charAt(i) == map.get(value)) {
                        check.pop();
                    } else {
                        check.push(s.charAt(i));
                    }
                } else {
                    check.push(s.charAt(i));
                }
            }
            
            if(check.size() == 0) answer = answer + 1;
            check.clear();
        }
        
        return answer;
    }
}