코딩테스트/프로그래머스
[Java] 프로그래머스 - 괄호 회전하기 (2단계)
배똥회장
2022. 7. 6. 14:20
728x90
코딩 테스트 풀이 체크리스트 |
|
2시간 내에 풀었는가? | O |
본인의 실력으로 풀었는가? | O |
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
//String으로 다루는 것보다 char로 다루는 것이 시간 차지를 덜 하기 때문에
//s을 char 배열로 만들고 ArrayList에 담기
char[] c = s.toCharArray();
ArrayList<Character> arr = new ArrayList<>();
for (int i = 0; i < c.length; i++) {
arr.add(c[i]);
}
//만약 list의 길이가 홀수일 경우에는 올바른 괄호를 만들 수 없기 때문에 그냥 바로 0 리턴
if (arr.size() % 2 != 0) return 0;
int bracket = arr.size() / 2;
//한 칸씩 한 칸씩 확인하면서 뒤로 넘기기
for (int i = 0; i < arr.size(); i++) {
Stack<Character> stack = new Stack<>();
int count = 0;
for (int j = 0; j < arr.size(); j++) {
char word = arr.get(j);
//만약 닫는 괄호이고,
if (word == ']' || word == '}' || word == ')') {
//스택이 비었다면 탈출
if (stack.empty()) break;
//스택 제일 위의 값이 동일한 모양의 열린 모양이 아니라면 탈출
if (word == ']' && stack.peek() != '[') break;
if (word == '}' && stack.peek() != '{') break;
if (word == ')' && stack.peek() != '(') break;
stack.pop();
count++;
} else { //단어가 열린 괄호라면 스택에 추가
stack.push(word);
}
}
//만약에 만들어진 괄호가 만들 수 있는 괄호 숫자와 동일하다면 답+1
if (count == bracket) answer++;
//맨 앞의 값은 맨 뒤로 추가하고 삭제하기
arr.add(arr.get(0));
arr.remove(0);
}
return answer;
}
}
테스트 1 〉 | 통과 (18.03ms, 80.9MB) |
테스트 2 〉 | 통과 (5.90ms, 85.8MB) |
테스트 3 〉 | 통과 (7.39ms, 81.4MB) |
테스트 4 〉 | 통과 (11.93ms, 83MB) |
테스트 5 〉 | 통과 (20.04ms, 79.5MB) |
테스트 6 〉 | 통과 (8.93ms, 74.8MB) |
테스트 7 〉 | 통과 (14.73ms, 75.2MB) |
테스트 8 〉 | 통과 (18.97ms, 73MB) |
테스트 9 〉 | 통과 (38.12ms, 86.6MB) |
테스트 10 〉 | 통과 (28.12ms, 82.1MB) |
테스트 11 〉 | 통과 (52.26ms, 86.3MB) |
테스트 12 〉 | 통과 (0.13ms, 73.3MB) |
테스트 13 〉 | 통과 (0.14ms, 73.2MB) |
테스트 14 〉 | 통과 (0.18ms, 75.3MB) |
728x90