728x90
오늘은 프로그래머스에서 스택/큐 문제 중 올바른 괄호 문제 풀이를 시작해보겠습니다. 올바른 괄호 문제는 문제명만 봤을 때 감이 오는 문제입니다. 역시 스택/큐 문제로 출제될만한 문제로, 괄호가 올바르게 되어있는지 유무를 판단하여 반환하는 알고리즘을 만드는 문제로 보입니다. 그럼 올바른 괄호 문제 풀이 해보러 가겠습니다.
프로그래머스 > 스택/큐 > 올바른 괄호 문제 풀이
∋ 문제 정보
- 문제명: 올바른 괄호
- 문제 난이도: Level 2
- 문제 푼 사람 수: 12861명
- 사용 가능 언어: 7개 (JavaScript 사용)
∋ 문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다.
예를 들어
º "()()" 또는 "(())()" 는 올바른 괄호입니다.
º ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
- 주어진 입력 괄호로만 이루어진 문자열이 올바른지 여부 구하기
- Input
- s: 괄호로만 이루어진 문자열
- Output: 괄호로만 이루어진 문자열(s)의 올바른지 여부 true/false
∋ 제한 사항
⊙ 문자열 s의 길이 : 100,000 이하의 자연수
⊙ 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
- 문자열(s)의 길이 ≤ 100,000
- 문자열 s는 '(', ')'로만 이루어져있다.
∋ 입출력 예
s answer "()()" true "(())()" true ")()(" false "(()(" false
∋ 입출력 예 설명
입출력 예 #1,2,3,4
문제의 예시와 같습니다.
∋ 알고리즘 만들기
1. 괄호의 개수를 체크하는 변수를 생성한다.
2. 괄호 문자열(s)에서 괄호 하나하나 확인한다.
2-1. 열린 괄호를 찾으면 변수의 값을 1 증가시킨다.
2-2. 닫힌 괄호를 찾으면, 현재 변수의 값이 양수인지 확인한다.
2-2-1. 값이 양수라면 열린 괄호가 앞에 있으므로 정상적임을 판단하여 변수의 값을 1 감소시킨다.
2-2-2. 값이 양수가 아니라면 열린 괄호가 앞에 없는 비정상적임을 판단하여 false를 반환한다.
3. 모든 괄호 문자열(s)를 확인한 결과 변수가 0보다 크면 열린 괄호가 더 많다는 의미이므로 false를 반환한다.
4. 변수가 0이라면 true를 반환한다.
∋ 코드 구현
function solution(s){
let answer = true;
// 1. 괄호의 개수를 체크하는 변수를 생성한다.
let bracketList = 0;
// 2. 괄호 문자열(s)에서 괄호 하나하나 확인한다.
for(let i = 0; i < s.length; i++) {
// 2-1. 열린 괄호를 찾으면 변수의 값을 1 증가시킨다.
if(s[i] === '(') {
bracketList++;
// 2-2. 닫힌 괄호를 찾으면, 현재 변수의 값이 양수인지 확인한다.
} else {
// 2-2-1. 값이 양수라면 열린 괄호가 앞에 있으므로
// 정상적임을 판단하여 변수의 값을 1 감소시킨다.
if (bracketList > 0) {
bracketList--;
// 2-2-2. 값이 양수가 아니라면 열린 괄호가 앞에 없는
// 비정상적임을 판단하여 false를 반환한다.
} else {
answer = false;
break;
}
}
}
// 3. 모든 괄호 문자열(s)를 확인한 결과 변수가 0보다 크면
// 열린 괄호가 더 많다는 의미이므로 false를 반환한다.
if(bracketList > 0) {
answer = false;
}
// 4. 변수가 0이라면 true를 반환한다.
return answer;
}
∋ 채점 결과
올바른 괄호 문제 풀이 채점 결과는 정확성 테스트 케이스 18개, 효율성 테스트 케이스 2개 모두 통과하여 100점으로 풀이 완료하였습니다.
728x90
'컴공생의 Knowledge > Algoritm Solution' 카테고리의 다른 글
[프로그래머스] 완전탐색 - 전력망을 둘로 나누기 문제 풀이 (feat.JS) (15) | 2022.07.24 |
---|---|
[프로그래머스] 완전탐색 - 피로도 문제 풀이(feat.JS) (15) | 2022.07.22 |
[프로그래머스] 스택/큐 - 같은 숫자는 싫어 문제 풀이 (feat.JS) (16) | 2022.07.19 |
[프로그래머스] 해시 - 폰켓몬 문제 풀이 (12) | 2022.07.18 |
[프로그래머스] 탐욕법(Greedy) - 단속카메라 문제 풀이 (11) | 2022.07.17 |
댓글