https://programmers.co.kr/learn/courses/30/lessons/76502
1. 유형
구현, 문자열, 스택
2. 로직
- 문자열 회전하는 코드
- 올바른 괄호인지 판단
[](){}문자열을 회전하면 ](){}[이 된다.
이런 문자열을 만드려면 덱 자료구조를 사용한다.
맨 앞의 엘리먼트를 빼고 맨 뒤에 추가해준다.
이것을 s의 길이만큼 반복해준다.
올바른 괄호판단은 너무 흔한 유형이고, Stack을 사용해서 판단한다
- 닫는 괄호가 나왔을때, stack의 맨 위의 엘리먼트가 한쌍을 이루는지 판단
- 만약 닫는 괄호인 경우, stack이 비어있거나, 쌍이 맞지 않으면 틀린 문자열이 된다.
3. 코드
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
char arrays[] = s.toCharArray();
Deque<Character> deq = new LinkedList<>();
for(char c: arrays){
deq.addLast(c);
}
for(int i=0; i<s.length(); i++){
if(check(deq)){
answer++;
}
char temp = deq.pop();
deq.addLast(temp);
}
return answer;
}
static boolean check(Deque<Character> deq){
Deque<Character> copydeq = new LinkedList<>();
copydeq.addAll(deq);
Stack<Character> stack = new Stack<>();
int size = deq.size();
for(int i=0; i<size; i++){
char head = copydeq.removeFirst();
if(head=='{' || head=='[' || head=='('){
stack.add(head);
}else{
if(stack.isEmpty()){
return false;
}else{
if(checkpair(stack.peek(), head)){
stack.pop();
}else
return false;
}
}
}
if(stack.size()==0)
return true;
else
return false;
}
static boolean checkpair(char top, char current){
if(top=='{' && current=='}'){
return true;
}else if(top=='[' && current==']')
return true;
else if(top=='(' && current==')')
return true;
else
return false;
}
}
/*
1) 회전하는 코드
마지막 행을 맨 앞으로
덱을 사용
2) 올바른 문자열 판단
if 여는 괄호:
스택에 추가
else:
if stack이 빔:
return false
else if stack의 맨위하고 맞지않음:
return false
else:
stack.pop
return true
*/
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - (Java)단체사진 찍기 (2) | 2021.06.08 |
---|---|
프로그래머스 - (Java)땅따먹기 (0) | 2021.06.07 |
프로그래머스 - (Java) 프렌즈4블록 (0) | 2021.06.06 |
프로그래머스 - (Java) 방금 그곡 (0) | 2021.06.05 |
프로그래머스 - 베스트앨범 (0) | 2021.05.26 |