문제 : 올바른 괄호
문제 설명
괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다.
(())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.
▣ 입력설명
첫 번째 줄에 괄호 문자열이 입력됩니다. 문자열의 최대 길이는 30이다.
▣ 출력설명
첫 번째 줄에 YES, NO를 출력한다.
▣ 입력예제 1
(()(()))(()
▣ 출력예제 1
NO
내코드
function solution(s) {
let answer = "YES";
let stack = [];
// 문자열 길이 만큼 순회
for (const word of s) {
// 문자가 ')' 인 경우
if (word === ")") {
// stack 에 남은게 없다면 쌍이 맞지 않아 잘못된 경우로 간주
if (stack.length === 0) return "NO";
// 스텍에있는 '(' 문자 하나 제거
stack.pop();
} else {
// 문자가 '(' 인 경우 스텍에 추가
stack.push(word);
}
}
// 마무리된 이후에 stack에 남은 경우가 있다면 쌍이 맞지 않아 잘못된 경우로 간주
if (stack.length > 0) answer = "NO";
return answer;
}
let a = "(()(()))(()"; // NO
// let a = "(())()"; // YES
console.log(solution(a));
풀이
- 문자가 '(' 인 경우 스텍에 추가
- 문자가 ')' 인 경우에 stack 에 남아있는 '(' 문자 하나를 pop 하여 스택에서 제외 만약 stack 남은 ')' 문자가 없다면 쌍이 맞지 않아 잘못된 경우로 간주해 NO 를 리턴
- 모든 반복문이 마무리된 경우 stack에 남은 경우가 있다면 쌍이 맞지 않아 잘못된 경우로 간주해 NO 를 리턴
- 위 과정들에서 NO 를 리턴한 경우가 아니라면 정상적인 괄호 조합을 의미하로 YES 가 반환됨
참고
'코딩 테스트 문제 및 풀이' 카테고리의 다른 글
[JS] 코딩 테스트 문제 : 크레인 인형뽑기(카카오 기출) [스택] (0) | 2024.01.04 |
---|---|
[JS] 코딩 테스트 문제 : 괄호 문자 제거 [스택] (0) | 2024.01.04 |
[JS] 코딩 테스트 문제 : 모든 아나그램 찾기 [해쉬, 투포인터, 슬라이딩 윈도우] (0) | 2023.11.27 |
[JS] 코딩 테스트 문제 : 아나그램 [해쉬 맵] (0) | 2023.11.01 |
[JS] 코딩 테스트 문제 : 학급 회장 [해쉬 맵] (0) | 2023.11.01 |