개발일기
괄호 회전하기 프로그래머스 - JAVA 본문
문제 풀이
1. 타당성 검토 메소드 구현 -> position을 통해 시작 위치에서 하나씩 더해서 올바른 위치에 있는지 확인하기
2. process 메서드에서 ), }, ] 만 stack push why? pop을 해서 현재 위치해서 구해지는 값을 비교하기 위하여
3. isValidate 안에 stack 선언하기 매번 타당성을 확일 할 때, 초기화하여 가져와야하기 때문에, static으로 전역 변수 선언 x
4. stream 에서 final 값이 아니면 원자값 AutomicInteger로 포장하여 사용
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.IntStream;
class Solution {
public int solution(String s) {
char[] str = s.toCharArray();
AtomicInteger answer = new AtomicInteger(0);
IntStream.range(0, str.length)
.forEach(position -> {
if(isValidate(position, str)) {
answer.incrementAndGet();
}
});
return answer.get();
}
private static boolean isValidate(int position, char[] str) {
Stack<Character> stack = new Stack<>();
try{
IntStream.range(0, str.length)
.mapToObj(i-> str[(position+i) % str.length])
.forEach(ch -> process(ch, stack));
} catch(IllegalArgumentException e) {
return false;
}
return stack.isEmpty();
}
private static void process(char ch, Stack<Character> stack) {
switch(ch) {
case '(' -> stack.push(')');
case '{' -> stack.push('}');
case '[' -> stack.push(']');
case ')', '}', ']' -> {
if(stack.isEmpty() || stack.pop() != ch) throw new IllegalArgumentException();
}
}
}
}
'Algorithm' 카테고리의 다른 글
프로그래머스 호텔 방 배정 (0) | 2024.12.02 |
---|---|
주식가격 - 프로그래머스 Level2 JAVA (2) | 2024.10.21 |
올바른 괄호 - Java (0) | 2024.10.21 |
[JAVA] 입국심사 - 이진탐색 (0) | 2024.09.23 |
[JAVA] 프로그래머스 순위검색 - 이진탐색 (0) | 2024.09.23 |