연습장/백준(BOJ) 문제풀이
[백준 2206 - Node.js] 벽 부수고 이동하기
🔗 문제 링크 https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net ✏️ 풀이 const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); const [N, M] = input[0].split(' ').map(Number); const map = input.slice(1).map(row => row.split('').map(Numbe..
[백준 11403 - Node.js] 경로 찾기
🔗 문제 링크 https://www.acmicpc.net/problem/11403 11403번: 경로 찾기 가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오. www.acmicpc.net ✏️ 풀이 const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); const N = +input[0]; const graph = input.slice(1).map(v => v.split(' ').map(Number)); const output = [...Array(N)].map(() => Array(N).fill(0)); con..
[백준 7562 - Node.js] 나이트의 이동
🔗 문제 링크 https://www.acmicpc.net/problem/7562 7562번: 나이트의 이동 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 www.acmicpc.net ✏️ 풀이 const offset = [ [-1, -2], [-2, -1], [-2, 1], [-1, 2], [1, 2], [2, 1], [2, -1], [1, -2] ]; const bfs = (start, [ex, ey], l, visited) => { const queue = [start]; while (queue.length) { const [x, y, depth] = queu..
[백준 1987 - Node.js] 알파벳
🔗 문제 링크 https://www.acmicpc.net/problem/1987 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net ✏️ 풀이 const input = require('fs').readFileSync('/dev/stdin').toString().trim().split("\n"); const [R, C] = input[0].split(' ').map(v => +v); const board = input.slice(1).map((v) => v.split("")); const offsetX = ..
[백준 7569 - Node.js] 토마토
문제 링크 https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 풀이 const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); const [M, N, H] = input[0].split(' ').map(v => +v); const boxes = input.slice(1).reduce((acc, v, i) => { acc[Math.f..
[백준 2468 - Node.js] 안전 영역
문제 링크 https://www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net 풀이 const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); const N = +input[0]; const areas = input.slice(1).map(v => v.split(' ').map(v => +v)); const offsetX = [0, 0, -1, 1]; const offsetY ..
[백준 7576 - Node.js] 토마토
문제 링크 https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 풀이 const [MN, ...input] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); const [M, N] = MN.split(' ').map(v => +v); const tomatoes = input.map(v => v.split(' ').map(v => +v)); class N..
[백준 4948 - Node.js] 베르트랑 공준
문제 링크 https://www.acmicpc.net/problem/4948 4948번: 베르트랑 공준 베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼 www.acmicpc.net 풀이 const input = require('fs') .readFileSync('/dev/stdin') .toString() .trim() .split('\n') .slice(0, -1) .map(v => +v); const prime = Array(123456 * 2 + 1).fill(true); for (let i = 2; i
[백준 17219 - Node.js] 비밀번호 찾기
문제 링크 https://www.acmicpc.net/problem/17219 17219번: 비밀번호 찾기 첫째 줄에 저장된 사이트 주소의 수 N(1 ≤ N ≤ 100,000)과 비밀번호를 찾으려는 사이트 주소의 수 M(1 ≤ M ≤ 100,000)이 주어진다. 두번째 줄부터 N개의 줄에 걸쳐 각 줄에 사이트 주소와 비밀번 www.acmicpc.net 풀이 const [NM, ...input] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); const [N, M] = NM.split(' ').map(v => +v); const memos = input.slice(0, N); const targets = input.slic..
[백준 17218 - Node.js] 비밀번호 만들기
문제 링크 https://www.acmicpc.net/problem/17218 17218번: 비밀번호 만들기 첫째 줄과 둘째 줄에 수형이가 눈을 감고 만든 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 길이는 최대 40자이다. 빈 문자열은 주어지지 않는다. 가장 긴 부분 문자열 www.acmicpc.net 풀이 const [ first, second ] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); const dp = [...Array(first.length + 1)].map(() => Array(second.length + 1).fill(0)); for (let i = 1; i