문제https://www.acmicpc.net/problem/17143 풀이이번 문제는 단순 구현 문제이지만 까다로운 로직이 필요한 구현 문제이다. 상어를 낚는 로직은 2차원 배열에서 해당 열에 가장 위에 있는 상어만 추출해주면된다.const casting = (curPos) => { for (let i = 0; i 모든 상어들이 움직이는 로직을 담당하는 함수를 만든다.이 함수에서 새로운 배치를 갖는 배열을 저장하도록 새로운 배열을 만든다. 이렇게 만들어진 배열에 각 상어의 새로운 위치를 담아준다.담을때 같은 위치에 상어가 중복되어 있을 때 무게가 가장 큰 상어만 남겨두도록 설계한다.const move = () => { const temp = Array.from({ length: r }, () =..
시뮬레이션
문제https://www.acmicpc.net/problem/17779 풀이구현 문제이며, BFS 알고리즘을 이용해 5지역의 영역을 이동 및 확장해가며 답을 도출하는 풀이이다. 코드const input = require('fs') .readFileSync(process.platform === 'linux' ? '/dev/stdin' : __dirname + '/example.txt') .toString().trim().split('\n').map(e => e.split(' ').map(Number));const [n] = input.shift();const map = input.slice();const total = map.reduce((acc, cur) => { return acc + cur.r..
문제https://www.acmicpc.net/problem/17140 풀이이 문제는 중복된 요소의 갯수를 측정해 이용하는 문제이다.Map객체를 이용해 시간복잡도를 최적화 해주는 로직이 핵심이라 생각한다. 코드const input = require('fs') .readFileSync(process.platform === 'linux' ? '/dev/stdin' : __dirname + '/example.txt') .toString().trim().split('\n').map(e => e.split(' ').map(Number));const [r, c, k] = input.shift();const arr = input;let cnt = 0;let temp = Array.from({ length: 10..
문제https://www.acmicpc.net/problem/15685 풀이이 문제를 풀며 햇갈렸던 부분을 정리하겠다. 1. x와 y의 범위가 0부터 100 까지 이므로 생성해야할 2차원 배열을 101 X 101의 크기로 만들어야 한다.2. 드래곤 커브는 끝지점을 기준으로 기존의 모양을 반시계로 돌린 모습이다.그 과정에서 각 지점의 좌표를 구하는 것이 많이 어려웠다.회전되는 새로운 점의 좌표는아래의 식과 같다.const nY = prevX - curX + curY;const nX = -(prevY - curY) + curX; 문제를 풀다보니 "반대인 오른쪽, 반시계방향으로 회전하면 어떤 식이 나올까?" 라는 생각이 들었다.그래서 구해봤다.const nY = prevX - curX + curX; cons..
문제https://www.acmicpc.net/problem/15684 풀이해당 문제는 dfs를 이용해 풀이했으며 문제의 조건을 구현하는데 조금 어려움이 있었다. 검증하고 있는 칸에 사다리를 놓을 수 있는지 검증하는 로직에서 이중으로 쓸대없이 검증을 진행했어서 시간초과 에러가 발생했었다. 코드const input = require('fs') .readFileSync(process.platform === 'linux' ? '/dev/stdin' : __dirname + '/example.txt') .toString().trim().split('\n').map(e => e.split(' ').map(Number));const [n, m, h] = input.shift();const ladder = in..
문제https://www.acmicpc.net/problem/16235 풀이이 문제는 구현 난이도는 그저 그랬으나 시간 복잡도를 신경써야 하는 문제였다. 기존 코드에서는 죽은 나무들을 담는 큐를 만들어 계산했지만, 이런 방식으로 풀이하면 시간 초과가 발생하므로 기존 나무를 담는 배열에 각 나무의 죽음 여부를 나타내는 값을 하나 추가하고 이를 활용해 풀이했다.추가적으로 내가 실수하며 풀이 시간이 40분 정도 증가했는데, 문제에서 입력으로 들어오는 X, Y 개념을 잘못 이해했다. 나는 좌표평면에서 세로를 Y, 가로를 X로 생각했다. 하지만 문제에서는 상단에서 떨어진 정도를 X, 맨 좌측에서 떨어진 정도를 Y로 표기했다. 이를 반대로 사용해 각 땅에 줘야하는 양분을 잘못 전달했었다. 코드const input..