문제 풀이 방법 최단 거리를 구하는 문제는 BFS를 이용해 풀어야 한다. 문제는 정석적인 BFS문제이며 큐를 이용해 탐색할 노드를 저장한 뒤 해단 노드의 정보를 이용해 맵의 4방향을 검증하며 방문하지 않고, 길이 있다면 move를 1더한 값과 함께 큐에 저장한다. 위의 검증을 반복하며 목표 좌표에 도달할 시에 move를 반환한다. 코드 function solution(maps) { let xLen = maps[0].length; let yLen = maps.length; let xGoal = xLen - 1; let yGoal = yLen - 1; let rotaX = [0, 0, -1, 1]; let rotaY = [-1, 1, 0, 0]; let que = [[0, 0, 1]]; while(que.l..
분류 전체보기
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdZ8fjI%2FbtslaRolNsQ%2FlmXkChhIr2tDvzhPoCaWAk%2Fimg.jpg)
문제 설명 문제 풀이 방법 이 문제는 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 ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAyixh%2FbtskZFuH4pO%2FZRkWgdCezLHqcJu4ALLS61%2Fimg.jpg)
문제 설명 문제 풀이 방법 이 문제는 스택을 이용해 풀었다. 주어지는 과제가 있다면 과제를 바로 수행해야 하므로 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..
코드 const path = __dirname + '/예제.txt'; // /dev/stdin let input = require('fs').readFileSync(path).toString().trim().split('\n').map(e => e.split(' ')); const [N, M, rotaTime] = input.shift().map(Number); const board = input.map(e => e.map(Number)); const solution = (N, M, board) => { let answer = '' let arr = [...board]; for (let i = 0; i < rotaTime; i++){ const newArr = spin(N, M, arr); arr = [..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcr2S3a%2FbtskhcOtjNG%2Fe7vBV2CVqOMbNwsoynOp00%2Fimg.jpg)
문제 설명 문제 풀이 방법 각 도형의 경우의 수를 따져 나올 수 있는 모양들이 특정 좌표가 주어졌을 때, 그 좌표를 좌상단에 고정한뒤 그 좌표를 기준으로 브럭의 위치에 해당하는 보드에서의 숫자들을 던한 뒤 Math.max를 이용해 비교해준다. 코드 1 // 빡구현을 깨닫게 해준 문제 const path = __dirname + '/예제.txt'; // /dev/stdin let input = require('fs').readFileSync(path).toString().trim().split('\n').map(e => e.split(' ').map(Number)); const [height, width] = input[0]; const board = input.splice(1); // 모든 브럭의 기준은..