하루에 한 문제
[프로그래머스 월간 코드 챌린지 시즌2] 괄호 회전하기 -Java 본문
https://programmers.co.kr/learn/courses/30/lessons/76502
import java.util.Stack;
class Solution {
public int solution(String s) {
int answer = 0;
for(int i=0; i<s.length(); i++) {
s=s.substring(1)+s.substring(0,1);
if(check(s)) answer++;
}
return answer;
}
private boolean check(String s) {
Stack <Character> stack = new Stack<>();
for(int i=0; i<s.length(); i++) {
char ch= s.charAt(i);
if(stack.empty()) stack.add(ch);
else {
if(ch=='[' ||ch=='(' ||ch=='{') {
stack.add(ch);
}
else {
if(ch==']') {
if(stack.peek()!='[') return false;
else stack.pop();
}
else if(ch==')') {
if(stack.peek()!='(') return false;
else stack.pop();
}
else if(ch=='}') {
if(stack.peek()!='{') return false;
else stack.pop();
}
}
}
}
if(stack.size()!=0) return false;
return true;
}
}
소요시간 : 15분
로직을 살펴보면
1. 문자열 s를 돌린다
-substring을 통해서 맨 뒤의 문자를 잘라서 앞에 넣어주면 배열을 돌린 효과를 얻을 수 있습니다.
- s의 길이가 1000밖에 되지 않기 때문에 시간은 충분합니다
2. 스택을 통해 올바른 괄호인지 확인한다.
- '{' , '(' , '[' 경우: 그냥 push 해줍니다
- '}', ')' , ']' 경우 : 현재 stack의 peek에 있는 문자가 각각 대응되는 괄호인지 확인해줍니다.
- 만약 대응되지 않는다면 false 반환
- 만약 대응된다면 현재 스택을 pop해줍니다.
끝~!
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 완주하지 못한 선수 -JavaScript (0) | 2021.04.28 |
---|---|
[프로그래머스 2021 Dev-Matching: 웹 백엔드 개발자(상반기)] 행렬 테두리 회전하기 -JavaScript (0) | 2021.04.28 |
[BOJ-1613] 역사 -Java (0) | 2021.04.16 |
[프로그래머스 월간 코드 챌린지 시즌2] 모두 0으로 만들기 -Java (0) | 2021.04.16 |
[프로그래머스 월간 코드 챌린지 시즌2] 음양 더하기 -Java (0) | 2021.04.16 |
Comments