알고리즘
[프로그래머스] 괄호 회전하기 - java
육빔
2024. 8. 8. 18:31
728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/76502
문제 풀이
전에 풀었던 올바른 괄호하고 비슷한 매커니즘 사용해서 푸는 문제
하지만 다른점은 ()로 한정된 것이 아니고 {}, [], () 이렇게 3가지 괄호의 종류가 있으므로 해쉬맵에 저장해놓고 시작한다.
그 다음은 코딩테스트 합격자 되기 : 자바편을 보면서 놀랐던 점인데 단순하게 문자열을 한 번 더 붙여서 for문으로 돌림으로써 회전하는 것을 단순하게 돌리는 걸로 구현한 점에서 감탄하엿다.
그 후는 똑같이 ArrayDeque에 넣어서 비교하면서 pop 시키고 최종으로 stack이 비어있으면 answer을 올라가는 형태로 구현
배운점
for문앞에 단순 변수를 넣어서 continue할때 특정 for문을 지목하여 넘길 수 있는 사실.
String의 각각에 요소에 접근하기 위해 s.charAt(인덱스번호)를 넣어서 접근 가능.
코드
import java.util.*;
class Solution {
public int solution(String s) {
HashMap<Character, Character> map = new HashMap<>();
map.put(')', '(');
map.put(']', '[');
map.put('}', '{');
int n = s.length();
s+=s;
int answer = 0;
A:for(int i=0; i<n; i++){
ArrayDeque<Character> stack = new ArrayDeque<>();
for(int j=i; j<i+n; j++){
char c = s.charAt(j);
if(!map.containsKey(c)){
stack.push(c);
}else{
if(stack.isEmpty() || !stack.pop().equals(map.get(c))){
continue A;
}
}
}
if(stack.isEmpty()){
answer++;
}
}
return answer;
}
}
완성
728x90
반응형