문제 설명 문제 풀이 방법 이 문제는 스택을 사용하는 문제이지만 괄호들이 좌로 한칸씩 회전하며 검증을 해야하기에 기존에 stack 배열에 추가 제거 하는 방식으로는 시간초과가 발생할거 같아 다른 방식을 참고했다. 기존에 내가 사용하던 방식은 돌아가며 stack배열에 하나씩 추가하며 괄호가 짝이 맞으면 pop()메서드를 이용해 stack에서 제거하는 방식이지만, 이번에는 맨 앞요소를 시작으로 짝을 비교하며 짝이 맞다면 stack에서 제거, 맞지 않는다면 stack에 추가하는 방식으로 했다. 이때 다른점은 stack에서 비교해 수정하는 것이 아니라 주어진 배열 혹은 문자열에서 stack에 있는 요소와 비교하는 방식이다. 코드 function solution(s) { let cnt = 0; for(let i=..
스택
문제 설명 문제 풀이 방법 이 문제는 stack을 사용하며 괄호가 올바른지 확인하며 풀이했다. 또한 재귀 방식을 이용해 풀었다. 우선 주어지는 괄호 문자열의 (와 )의 갯수가 같아질 때를 찾아 u와 v로 나눈다. 그리고 나누어진 문자열이 올바른 괄호 문자열인지 확인하는 함수를 작성한다. 이 함수는 stack을 이용해 괄호 문자열이 제대로된 쌍을 갖는지 확인한 뒤 불리언 값을 반환한다. check 함수를 이용해 올바른지 여부를 확인 후 올바르 않다면 문제의 조건을 보며 코드를 작성한다. 코드 function solution(p) { // ()문자열을 올바른 괄호 문자열로 변환해주는 함수 // 빈 문자열이 들어오면 빈 문자열을 반환, // 올바른 괄호문자열이 들어오면 그대로 반환, // 올바르지 않은 괄호 ..
문제 설명 https://www.acmicpc.net/problem/17178 17178번: 줄서기 아이즈원의 팬인 시온이는 드디어 티켓팅에 성공하여 콘서트를 갔다. 콘서트장에 일찍 도착한 시온이는 기대하며 입장을 위해 줄을 섰다. 하지만 아이즈원의 인기대로 시온이를 포함한 많은 www.acmicpc.net 문제 풀이 방법 이 문제는 스택을 이용해 풀었다. FILO(First In First Out) 선입 후출 방식으로 스택을 구성했다. 입력받는 사람들이 줄선 리스트와 그 리스트를 아파벳, 숫자로 정렬한 리스트의 맨 앞 값들을 비교하며 스택에 넣을지 제거할지 결정하는 코드를 작성했다. 대기하는 사람들이 있는 스택에 남은 사람이 없으면 GOOD, 있다면 BAD를 출력하도록 했다. 코드 const path ..
문제 설명 문제 풀이 방법 이 문제는 스택을 이용해 풀었다. 주어지는 과제가 있다면 과제를 바로 수행해야 하므로 stack에 넣고 2번 작업으로 넘어간다. 과제가 없다면 2번 작업으로 넘어간다. 과제를 받게되면 남은 기간에 -1을 해주고 남은 기간이 0이 되면 score에 해당 점수를 더해주고 pop() 메서드를 이용해 작업 리스트에서 뽑아준다. 집계된 점수를 반환 코드 const path = __dirname + '/예제.txt'; // /dev/stdin let input = require('fs').readFileSync(path).toString().trim().split('\n').map(e => e.split(' ').map(Number)); const [N] = input.shift(); c..
문제 설명 문제 풀이 방법 처음에 문자열로만 접근하려 했는데 생각해보니 스택으로 접근하면 더 빠르게 될거 같아 접근법을 바꿨다. 아무래도 문자열의 길이가 1,000,000 까지다 보니 너무 길다 생각했다. 문자열로 접근해 풀게되면 문자열을 배열로 바꾸고, for문을 사용하고 그 안에 splice를 사용하기에 시간 복잡도가 높게 나올거 같았다. stack으로 접근하면 for문 한번만 돌면 되기에 시간 복잡도가 낮게 나올것이다. 내가 작성한 코드 const solution = (s) => { let arr = []; for(let i=0; i