티스토리 뷰
[Codility] Lesson 7: Stacks and Queues - Brackets (javascript) 문제 풀이
miiingo 2020. 6. 26. 17:06깃허브 : https://github.com/miiingo/codility
Task description
원본 사이트 : app.codility.com/programmers/lessons/7-stacks_and_queues/brackets/
- N 개의 문자로 구성된 문자열 S가 주어짐
- 문자열 S는 "(", "{", "[", "]", "}" 또는 ")"의 문자로만 구성됨
- 괄호 식이 올바르면 1을, 아니면 0을 return
- N은 [0..200,000] 범위 내의 정수
- 가장 효율적인 알고리즘 작성
Solution
CASE 1: 배열을 이용해 스택 형식으로 해결 - 100%
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(S) {
// write your code in JavaScript (Node.js 8.9.4)
const N = S.length;
let stack = [];
for(let i=0; i<N; i++){
switch(S.charAt(i)){
case '(':
case '{':
case '[':
stack.push(S.charAt(i));
break;
case ')':
if(stack[stack.length-1] == '('){
stack.pop();
}
else{
return 0;
}
break;
case '}':
if(stack[stack.length-1] == '{'){
stack.pop();
}
else{
return 0;
}
break;
case ']':
if(stack[stack.length-1] == '['){
stack.pop();
}
else{
return 0;
}
break;
}
}
if(stack.length > 0){
return 0;
}
else{
return 1;
}
}
- N : 문자열 S의 길이
- stack : 문자열 S의 왼쪽 괄호들을 저장할 배열(스택)
- 왼쪽 괄호이면 stack에 push
- 오른쪽 괄호이면 스택의 top을 비교
해당 괄호에 맞는 왼쪽 괄호가 있으면 pop
해당 괄호에 맞는 왼쪽 괄호가 없으면 0을 return
- for문이 종료되면 stack의 length를 확인해 결과 return
length > 0 : stack에 짝이 맞지 않는 왼쪽 괄호가 남아있다는 소리이므로 0을 return
length = 0 : stack이 비어있는, 모든 괄호가 짝이 맞는다는 소리이므로 1을 return
CASE 1: Result
app.codility.com/demo/results/trainingGBXCTA-SN4/
CASE 1: Analysis
The solution obtained perfect score.
이 솔루션은 완벽한 점수를 얻었습니다.
결론
가장 마지막에 열린 괄호부터 순서대로 닫혀야되기 때문에 후입선출 구조인 스택을 이용
=> Array의 push, pop 기능 이용
대신, Array에는 스택의 top 함수가 없기 때문에 [배열의 길이 -1]로 top 값을 확인
switch case문을 사용하니까 왼쪽 괄호('(', '{', '[')의 경우에는 편리한데 오른쪽 괄호(')', '}', ']')인 경우 비슷한 소스 코드가 중복되는 것 같아서 수정을 해보려고 했는데 뭔가 점점 더 복잡해지는 느낌이라 그냥 여기서 마무리.
조금 더 깔끔하게 할 수 있는 방법을 생각해봐야 할 듯.
'알고리즘 > Codility' 카테고리의 다른 글
- Total
- Today
- Yesterday
- ambrosus
- javascript
- codility
- 암브로셔스
- ubuntu
- Hyperledger Fabric v1.2
- 하이퍼레저 인디
- Hyperledger Fabric v1.1
- 빅데이터 교육
- Private Data
- 어서와 데이터는 처음이지
- 블록 체인
- 직딩잇템
- Blockchain
- DOCs
- 알고리즘
- 빅데이터 강의
- Hyperledger Indy
- 블록체인
- Hyperledger Fabric
- 빅데이터
- 코딩테스트
- 코딜리티
- 코테
- docker
- 기초 of 기초 데이터 개념
- 하이퍼레저 패브릭
- 문제풀이
- 빅데이터 기초
- 하이퍼레저 페브릭
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 | 31 |