Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 자바의 정석
- 1043번
- Spring
- 클린코드
- springboot
- Design Patterns
- Design Pattern
- 코딩 테스트
- 10830번
- 11758번
- 냄새와 휴리스틱
- 2156번
- 1300번
- java의 정석
- SerialDate 리펙터링
- BOJ
- 11286번
- 백준
- 17장
- DxTrace
- programmers
- 프로그래머스
- 2166번
- 코딩테스트
- Dxerr.h
- Adapater Pattern
- 9장
- 가장 긴 증가하는 부분 수열2
- 2206번
- java
Archives
- Today
- Total
Don't give up!
[프로그래머스] 괄호 회전하기(java) 본문
코딩테스트 연습 - 괄호 회전하기 | 프로그래머스 (programmers.co.kr)
어떻게 생각하고 문제를 풀었는가?
닫힌 괄호 문자가 열린 괄호 문자보다 먼저 나타나면 문자열은 올바른 괄호 문자열이라고 판단할 수 없으며 괄호 안에 다른 괄호가 들어있는 경우 가장 안쪽의 괄호는 열린괄호와 닫힌 괄호가 같이 존재해야 합니다.
따라서 처음 확인되는 닫힌 괄호는 열린 괄호 바로 다음의 인덱스에 위치하여야 함을 생각하였으며 올바르다고 판단된 열린 괄호와 닫힌 괄호는 검사에서 제외함으로서 외부 괄호가 올바른 괄호 문자열을 형성하고 있는지 판단할 수 있을 것이라고 생각하였습니다.
코드
import java.util.Stack;
class Solution {
static Stack<Character> stack;
public int solution(String s) {
int answer = 0;
for(int i=0; i<s.length();i++){
String spined = s.substring(i) + s.substring(0,i);
if(isCorrect(spined)) answer++;
}
return answer;
}
public boolean isCorrect(String str){
stack = new Stack<>();
for(var c : str.toCharArray()){
switch(c){
case '(','{','[':
stack.push(c);
break;
case ')':
if(stack.empty() || stack.peek()!='(') return false;
stack.pop();
break;
case '}':
if(stack.empty() || stack.peek()!='{') return false;
stack.pop();
break;
case ']':
if(stack.empty() || stack.peek()!='[') return false;
stack.pop();
break;
}
}
return stack.empty() ? true : false;
}
}
생각한 내용을 바탕으로 코드를 작성하였습니다.
괄호는 '( )', '{ }', '[ ]' 세가지가 모두 존재할 수 있습니다. 따라서 switch문을 통해 닫힌 괄호에 대응하는 열린 괄호를 찾도록 하였습니다.
Stack 자료구조에 열린괄호를 모두 넣고 가장 최근에 스택에 삽입한 열린 괄호가 닫힌 괄호에 대응하는 경우 pop함수를 통해 삭제함으로서 안쪽의 올바른 괄호를 제외하고 검사할 수 있도록 코드를 작성하였습니다.
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스] 뉴스 클러스터링(java) (0) | 2021.05.15 |
---|---|
[프로그래머스] 메뉴 리뉴얼 (java) (0) | 2021.05.13 |
[프로그래머스] 행렬 테두리 회전 (java) (0) | 2021.05.12 |