| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 123만들기
- 16953번
- 알고리즘
- 17626번
- 20300번
- 나이트의이동
- 맥주마시면서걸어가기
- 14940번
- 2422번
- 5014번
- javascript
- node.js
- 1969번
- 7526번
- 20365번
- 1541번
- 백준
- 정리
- 5427번
- 타입스크립트 프로그래밍
- 한윤정이 이탈리아에 가서 아이스크림을 사먹는데
- 풀이
- 자바스크립트
- 2503번
- 1926번
- 13913번
- 6593번
- 토마토
- 16439번
- 타입스크립트
Archives
- Today
- Total
Sqsung DevLog
[백준] 1926번: 그림 - Node.js (자바스크립트) 본문
1. 문제 ㅡ 1926번: 그림(난이도: Silver I)
1926번: 그림
어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로
www.acmicpc.net
2. 풀이 ㅡ Node.js (자바스크립트)
const [info, ...input] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const [Y, X] = info.split(' ').map(val => +val);
const board = input.map(row => [...row.split(' ').map(val => +val)]);
const checked = Array.from({ length: Y }, () => Array.from({ length: X }, () => false));
const dirs = [[0, 1], [0, -1], [1, 0], [-1, 0],];
const drawings = [];
const measureDrawingSize = (x, y) => {
let size = 1;
const queue = [[x, y]];
while (queue.length) {
const [x, y] = queue.shift();
dirs.forEach(dir => {
const xPos = dir[0] + x;
const yPos = dir[1] + y;
if (xPos >= 0 && yPos >= 0 && xPos < X && yPos < Y && board[yPos][xPos] && !checked[yPos][xPos]) {
checked[yPos][xPos] = true;
size += 1;
queue.push([xPos, yPos]);
}
});
}
return size;
};
for (let y = 0; y < Y; y++) {
for (let x = 0; x < X; x++) {
if (!board[y][x] || checked[y][x]) continue;
checked[y][x] = true;
drawings.push(measureDrawingSize(x, y));
}
}
console.log(drawings.length ?? 0);
console.log(drawings.length ? Math.max(...drawings) : 0);
2-1. 풀이 설명
입력 값을 순회하면서 값이 1인 경우, 즉 그림의 일부분인 경우 BFS 탐색을 통해 좌우상하로 연결된 모든 1의 개수를 세는 것이 문제의 핵심이다.
각 그림의 사이즈 정보는 배열에 저장해두었고, 마지막에 해당 배열의 길이(총 그림 개수)와 배열에서 가장 큰 수(가장 큰 그림의 사이즈)를 출력했다.
2-2. 회고
- 문제에 분명 그림이 없는 경우에는 0을 출력하라고 기재되어 있는데, 그림이 없는 경우를 따로 처리하지 않아 한 50% 정도에서 계속 오답처리 됐다.
- BFS와 점점 친해져가는 건 너무 좋지만 우선 문제부터 잘 읽자.
'Algorithm' 카테고리의 다른 글
| [백준] 13549번: 숨바꼭질 3 - Node.js (자바스크립트) (0) | 2023.05.24 |
|---|---|
| [백준] 7562번: 나이트의 이동 - Node.js (자바스크립트) (2) | 2023.05.23 |
| [백준] 5014번: 스타트링크 - Node.js (자바스크립트) (2) | 2023.05.22 |
| [백준] 1697번: 숨바꼭질 - Node.js (자바스크립트) (0) | 2023.05.22 |
| [백준] 14425번: 문자열 집합 (Node.js) (0) | 2023.05.19 |