프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
<STUDY>
📢 문제 📢
다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.
- (), [], {} 는 모두 올바른 괄호 문자열입니다.
- 만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다.
- 만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열입니다. 예를 들어, {} 와 ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다.
대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다.
이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때
s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- s의 길이는 1 이상 1,000 이하입니다.
<전체 코드>
1. replaceAll() 이용
function solution(s) {
let count = 0;
for (i = 0; i < s.length; i++) {
let parenthesis = s;
while (parenthesis.length > 0) {
parenthesis = parenthesis.replaceAll("()", "").replaceAll("[]", "").replaceAll("{}", "");
if (!parenthesis.includes("()") && !parenthesis.includes("{}") && !parenthesis.includes("[]")) {
break
};
}
if (parenthesis.length === 0) count++;
s += s[0];
s = s.substr(1, s.length - 1);
}
return count;
}
2. 스택 이용
function solution1(s) {
let count = 0;
const [openParenthesis, closeParenthesis] = [["(", "{", "["], [")", "}", "]"]];
for (let i = 0; i < s.length; i++) {
if (openParenthesis.includes(s[0])) {
let stack = [];
for (let p of Array.from(s)) {
if (openParenthesis.includes(p)) stack.push(p)
else {
openParenthesis.indexOf(stack[stack.length - 1]) === closeParenthesis.indexOf(p) && stack.pop();
}
}
stack.length === 0 && count++;
}
s += s[0];
s = s.substr(1, s.length);
}
return count;
}
<코드 설명>
1. replaceAll() 이용하기
function solution(s) {
let count = 0;
for (i = 0; i < s.length; i++) {
let parenthesis = s;
while (parenthesis.length > 0) {
parenthesis = parenthesis.replaceAll("()", "").replaceAll("[]", "").replaceAll("{}", "");
if (!parenthesis.includes("()") && !parenthesis.includes("{}") && !parenthesis.includes("[]")) {
break
};
}
if (parenthesis.length === 0) count++;
s += s[0];
s = s.substr(1, s.length - 1);
}
return count;
}
- s (문자열)을 parenthesis로 복사한 뒤 "()", "{}", "[]" 가 없어질 때까지 replaceAll을 이용하여 공백으로 바꾼다.
- parenthesis 의 길이가 0이라면 count를 증가시킨다.
- 왼쪽으로 회전시킨다.
2. 스택 이용하기
function solution1(s) {
let count = 0;
const [openParenthesis, closeParenthesis] = [["(", "{", "["], [")", "}", "]"]];
for (let i = 0; i < s.length; i++) {
if (openParenthesis.includes(s[0])) {
let stack = [];
for (let p of Array.from(s)) {
if (openParenthesis.includes(p)) stack.push(p)
else {
openParenthesis.indexOf(stack[stack.length - 1]) === closeParenthesis.indexOf(p) && stack.pop();
}
}
stack.length === 0 && count++;
}
s += s[0];
s = s.substr(1, s.length);
}
return count;
}
- 여는 괄호와 닫는 괄호를 각각 배열로 정의한다.
- s의 첫 번째 문자가 여는 괄호일 때만 아래 코드를 실행한다.
- 해당 문자열이 여는 괄호라면 stack에 추가한다.
- 닫는 괄호라면 stack의 마지막에 있는 문자열이 닫는 괄호와 짝이 맞는지 확인하고 맞다면 stack에서 마지막 문자열을 없앤다.
- stack의 길이가 0이라면 count를 증가시킨다.
🔆프로그래머스 Lv2. 괄호 회전하기🔆
ez1n - Overview
Front-End Developer. ez1n has 16 repositories available. Follow their code on GitHub.
github.com
'STUDY > Algorithm' 카테고리의 다른 글
[프로그래머스_자바스크립트] Lv.2 n^2 배열 자르기 (0) | 2023.01.14 |
---|---|
[프로그래머스_자바스크립트] Lv.2 영어 끝말잇기 (0) | 2023.01.13 |
[프로그래머스_자바스크립트] Lv.2 [1차] 뉴스 클러스터링 (0) | 2023.01.09 |
[프로그래머스_자바스크립트] Lv.2 K진수에서 소수 개수 구하기 (0) | 2023.01.08 |
[프로그래머스_자바스크립트] Lv.2 멀리 뛰기 / 동적 계획법 (Dynamic Programming) (2) | 2023.01.07 |