티스토리 뷰
문제: https://www.acmicpc.net/problem/16235
문제 풀이
- 나무 위치와 나이를 별도로 저장하지 않고, 주어지는 배열을 그대로 사용하자. trees[x, y ,z]
- 나이가 어린 나무부터 양분을 섭취하므로, trees 배열을 나이를 기준으로 오름차순 정렬한다.
- 반복문을 통해 K번 봄, 여름, 가을, 겨울을 거친다.
- 죽은 나무 deadTrees, 살아있는 나무 aliveTrees로 배열을 생성하여 한 해를 보낸다.
- trees 배열을 비우고, 가을에 새로 번식한 나무와 함께 살아있는 나무 aliveTrees를 trees 배열에 저장한다.
(이때, 번식한 나무의 나이가 1이고 aliveTrees는 이미 오름차순 정렬되어 있으므로, 다시 정렬할 필요가 없다)
전체 코드
const fs = require("fs");
const [[n, m, k], ...data] = fs.readFileSync("/dev/stdin").toString().trim().split("\n")
.map(line => line.split(" ").map(Number));
const A = data.slice(0, n);
let trees = data.slice(n);
const graph = Array.from(new Array(n), () => Array(n).fill(5)); // 현재 양분
const dr = [-1, -1, -1, 0, 1, 1, 1, 0];
const dc = [-1, 0, 1, 1, 1, 0, -1, -1];
// 나이 오름차순 정렬
trees.sort((a, b) => {
return a[2] - b[2];
})
// K년 후
for (let i = 0; i < k; i++) {
const aliveTrees = [];
const deadTrees = [];
/* 봄 */
for (const [r, c, a] of trees) {
// 죽은 나무
if (graph[r-1][c-1] < a) {
deadTrees.push([r, c, a]);
continue;
}
// 나무 양분 섭취
graph[r-1][c-1] -= a;
aliveTrees.push([r, c, a+1]);
}
trees = []; // 기존 배열 비우기
/* 여름 */
for (const [r, c, a] of deadTrees) {
graph[r-1][c-1] += Math.floor(a / 2); // 죽은 나무 양분 저장
}
/* 가을 */
for (const [r, c, a] of aliveTrees) {
if (a % 5 !== 0) continue; // 번식할 수 없는 나무
for (let d = 0; d < 8; d++) {
const nr = r + dr[d];
const nc = c + dc[d];
// 땅을 벗어나면 패스
if (nr < 1 || nr > n || nc < 1 || nc > n) continue;
trees.push([nr, nc, 1]); // 새 나무 번식
}
}
trees.push(...aliveTrees); // 살아있는 나무 저장
/* 겨울 */
for (let r = 0; r < n; r++) {
for (let c = 0; c < n; c++) {
graph[r][c] += A[r][c]; // 양분 추가
}
}
}
console.log(trees.length);
'🧩 알고리즘' 카테고리의 다른 글
[Softeer] Lv.2 나무 공격 + 입출력 방법 (0) | 2025.01.27 |
---|---|
[프로그래머스] 연도별 대장균 크기의 편차 구하기 - SQL (1) | 2024.11.29 |
[백준] 15686 치킨 배달 - Node.js (0) | 2024.11.23 |
백준 14503 로봇 청소기 - Node.js (0) | 2024.10.15 |
[백준] 14719 빗물 - node.js (1) | 2023.06.13 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- fetch
- nodeJS
- dfs
- 알고리즘
- 다이나믹프로그래밍
- 코딩테스트
- p5js
- React-native
- 파이썬
- Python3
- 코테
- 비동기
- node.js
- javascript
- React
- python
- 백준
- Spotify
- 프로그래머스
- 백트래킹
- flutter
- backtracking
- 코어자바스크립트
- rn
- 이벤트루프
- React.js
- DP
- 코드분석
- Unsplash
- 문제풀이
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함