https://school.programmers.co.kr/learn/courses/30/lessons/76502?language=javascript
다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.
대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.
s | result |
---|---|
"{}" | 3 |
"}]()[{" | 2 |
"[)(]" | 0 |
"}}}" | 0 |
입출력 예 설명
입출력 예 #1
x | s를 왼쪽으로 x칸만큼 회전 | 올바른 괄호 문자열? |
---|---|---|
0 | "{}" | O |
1 | "](){}[" | X |
2 | "(){}[]" | O |
3 | "){}[](" | X |
4 | "{}" | O |
5 | "}{" | X |
다음 표는 "}]()[{" 를 회전시킨 모습을 나타낸 것입니다.
x | s를 왼쪽으로 x칸만큼 회전 | 올바른 괄호 문자열? |
---|---|---|
0 | "}]()[{" | X |
1 | "]()[{}" | X |
2 | "()[{}]" | O |
3 | ")[{}](" | X |
4 | "{}" | O |
5 | "{}]()[" | X |
입출력 예 #3
입출력 예 #4
옳은 괄호 문자열인지 판단하는 함수를 만들어준다.
들어온 문자열의 길이 만큼, 앞 문자를 떼서 뒤에다 붙인 문자열을 만들어주는 것을 반복하고
만든 함수에 집어넣는다.
반복마다 옳은 괄호 문자열이라면 answer += 1을 해준다.
function solution(s) {
const len = s.length;
let answer = 0;
for (let i = 0; i < len; i++) {
const str = s.slice(i) + s.slice(0, i);
answer += checkBracket(str);
}
return answer;
}
function checkBracket(s) {
const stack = [];
const str = s.split("");
while (str.length > 0) {
stack.push(str.shift());
if (stack.length > 1) {
if (stack[stack.length - 1] === "]" && stack[stack.length - 2] === "[") {
stack.pop();
stack.pop();
} else if (stack[stack.length - 1] === ")" && stack[stack.length - 2] === "(") {
stack.pop();
stack.pop();
} else if (stack[stack.length - 1] === "}" && stack[stack.length - 2] === "{") {
stack.pop();
stack.pop();
}
}
}
return stack.length === 0 ? 1 : 0;
}
function solution(s) {
if(s.length % 2 === 1) return 0;
let answer = 0;
const mapping = { "}" : "{", "]" : "[", ")" : "("};
for(let i = 0; i < s.length; i++) {
const stack = [];
const rotate = s.slice(i) + s.slice(0, i);
let flag = true;
for(let j = 0; j < s.length; j++) {
if(rotate[j] === "[" || rotate[j] === "(" || rotate[j] === "{" )
stack.push(rotate[j]);
else {
const last = stack.pop();
if(last !== mapping[rotate[j]]) {
flag = false
break;
}
}
}
if(flag) answer++;
}
return answer;
}
// 출처: 프로그래머스
해시를 이용하는 것은 생각도 못해봤다...!
좋은 풀이인 것 같다.