olrlobt
[프로그래머스 2단계] 괄호 회전하기 본문
🔒 2단계 - 괄호 회전하기
📌 테스트케이스 추가 힌트
해당 문제는 추가 테스트케이스가 필요하지 않았다.
✍️ 풀이법
나는 이 문제를 보자마자, 스택으로 해결해야 하는 문제라고 생각했다.
문제를 이해하는 것 자체는 최단시간이 걸렸지만, 문제를 해결함에 있어서 생각해야 할 것들이 있었다.
- 생각 해야 할 것
1. 열리는 괄호와 닫히는 괄호를 어떻게 매치하여 줄 것인가.
해당 문제에서 무턱대고 열리는 괄호 '(' 가 닫히는 괄호 ')'를 만난다는 if문을 사용하게 되면,
문제는 당연히 해결이 가능하지만 코드 자체는 매우 더러워 질 것이다.
2. 문자열 s를 돌리는 방법
단순히 substring을 사용하여 쪼갠다면, 문제 해결은 가능하지만 객체 생성을 많이 반복하게 되어,
좋지 못한 코드가 되어버린다.
우테코 5기를 진행하며, 클린코드와 자바다운 자바 코드에 대한 공부를 많이 하게 되었다.
공부하면서, 가독성이 좋은 코드가 왜 필요한 지에 대해 알게 되었고, 앞으로의 코딩테스트에도
최대한 클린 코드로 작성할 계획이다.
내가 생각한 해결법은 다음과 같다.
- 해결법
1. 열린괄호를 갖고 있는 List와 닫힌괄호를 괒고 있는 List를 선언하여, contains로 포함 여부를 체크한다.
해당 방법으로 if문을 최소화 할 수 있었다.
2. String을 붙이고 자르고 변경해야 한다면 StringBuilder 혹은 StringBuffer를 사용한다.
StringBuilder와 StringBuffer는 변경에 최적화된 문자열로, 문자열을 변경할때, 따로 객체를 생성하지
않는다. 따라서 수정이 많이 진행된다면, String 타입을 변환해주자.
해당 문제만 해결 되었다면, 코드를 작성하는 것은 그다지 어렵지 않을 것이다.
🗝️ 풀이
import java.util.Stack;
import java.util.List;
import java.lang.StringBuilder;
class Solution {
public int solution(String s) {
int answer = 0;
StringBuilder SB = new StringBuilder(s);
List<Character> open = List.of('[', '{', '(');
List<Character> close = List.of(']', '}', ')');
for(int x=0; x<SB.length(); x++){
Stack<Character> stack = new Stack<>();
for(int i=0; i<SB.length(); i++){
char c = SB.charAt(i);
if(!stack.isEmpty() && close.contains(c) && open.contains(stack.peek()) ){
if(close.indexOf(c) == open.indexOf(stack.peek())){
stack.pop();
}
}else{
stack.push(c);
}
}
if(stack.size() == 0){
answer++;
}
SB = SB.append(SB.charAt(0));
SB.deleteCharAt(0);
}
return answer;
}
}
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스 2단계] k진수에서 소수 개수 구하기 (0) | 2022.12.30 |
---|---|
[프로그래머스 2단계] n^2배열 자르기 (0) | 2022.12.30 |
[프로그래머스 2단계] 캐시 (0) | 2022.12.30 |
[프로그래머스 2단계] 위장 (0) | 2022.12.30 |
[프로그래머스 2단계] 이진 변환 반복하기 (0) | 2022.12.30 |
Comments