문제풀이
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
|
function solution(s) {
s = s.split("");
let Len = s.length - 1;
let answer = 0;
for(let x=0; x<Len; x++) {
const stack = [];
for (let y = 0; y < s.length; y++) {
stack.push(s[y]);
if (
(stack[stack.length - 2] === "("
&& stack[stack.length - 1] === ")") ||
(stack[stack.length - 2] === "{"
&& stack[stack.length - 1] === "}") ||
(stack[stack.length - 2] === "["
&& stack[stack.length - 1] === "]")
) {
stack.pop();
stack.pop();
}
}
if (stack.length === 0) answer++;
let temp = s.shift()
s.push(temp)
}
return answer;
}
|
cs |
처음에 이 문제를 풀기하기 위해 일일이 for문, shift와 push를 반복을 진행하려고 했다가 잘못 구성해서 그런지는 몰라도 효율성에서 오류가 나는 바람에 한동안 생각하다가 고안한 로직이다.
for문 두 개를 사용해서 바깥 for 문은 기존 s 입력 값을 회전하는 반복문으로 사용하고 안 쪽 바깥 for 문은 문제에서 가장 중요한 회전한 s가 올바른 괄호인지 검증하는 것을 stack을 사용해 나타냈고 이 stack이 비었으면 올바른 괄호이고 그러한 상황일 때마다 answer를 더해 주는 식으로 로직을 구성했다.
그리고 24~25번째 코드 끝마무리를 잊어먹고 있다가 한참 후에 추가하니 올바르게 작동 되었다.
알고리즘 문제 중에서 stack이라는 개념이 정말 어디에 빠질래야 빠질 수 없는 존재임을 한 번 더 느낀 것 같다.
'프로그래머스' 카테고리의 다른 글
5/20[문제풀이] 프로그래머스 Lv2 수식 최대화 (0) | 2021.05.21 |
---|---|
5/19[문제풀이] 프로그래머스 Lv2 다음 큰 숫자 (0) | 2021.05.20 |
5/17[문제풀이] 프로그래머스 Lv2 영어 끝말잇기 (0) | 2021.05.17 |
5/14[문제풀이] 프로그래머스 Lv2 짝지어 제거하기 (0) | 2021.05.14 |
5/13[문제풀이] 프로그래머스 Lv2 숫자의 표현 (0) | 2021.05.13 |