반응형
문제 바로 가기
풀이
- 사용 언어 : JavaScript
- 풀이한 날짜 : 2022-12-13
const fs = require("fs");
// const input = fs.readFileSync("./input.txt", "utf8").toString();
const input = fs.readFileSync("/dev/stdin", "utf8").toString();
const inputTestCase = input.split("\n");
const n = Number(inputTestCase[0]);
const room = [];
for (let i = 1; i <= n; i++) {
room.push(inputTestCase[i].split(""));
}
function solution(n, room) {
let [availableSeatRow, availableSeatCol] = [0, 0];
availableSeatRow = countAvailableSeat(n, room, "row");
availableSeatCol = countAvailableSeat(n, room, "col");
console.log(`${availableSeatRow} ${availableSeatCol}`);
}
function countAvailableSeat(n, room, dir) {
let availableSeatCount = 0;
for (let i = 0; i < n; i++) {
let straight = 0;
for (let j = 0; j < n; j++) {
let [a, b] = dir === "row" ? [i, j] : [j, i];
if (room[a][b] === ".") {
straight += 1;
} else {
straight = 0;
}
if (straight == 2) {
availableSeatCount += 1;
}
}
}
return availableSeatCount;
}
solution(n, room);
풀이 로직
- 2차원 평면을 탐색하는 문제로, 2차원 배열을 이용해서 해결한다.
- 우선 입력값을 2차원 배열에 저장하고, 2중 반복문을 통해 이 2차원 배열을 탐색한다. 이 때 연속적으로 2칸 이상의 빈 칸이 얼마나 존재하는지를 계산한다.
- 가로 방향으로 탐색하는 경우와 세로 방향으로 탐색하는 경우 모두 조사해야 하므로 2중 반복문을 두 번 돌아야 한다.
- 따라서 코드 길이를 줄이기 위해 2중 반복문 코드를 함수로 따로 묶었다.
문제 접근 과정 및 느낀점
- 로직은 바로 생각났으나 문제를 잘못 이해하여, 한 줄에 누울 수 있는 자리가 최대 1개 뿐이라고 생각했다.
- 다른 분들이 작성하신 질문글의 반례를 보고 나서야 오류를 바로 잡을 수 있었다.
- 문제 설명이 좀 모호한 점이 있었던 것을 다른 분들도 공감하시는 것 같아 다행이긴 하지만, 앞으로 문제를 더 잘 읽고 잘 이해해야겠다는 생각이 든다.
반응형
'◼ PS Note > 백준' 카테고리의 다른 글
[백준] 1292번 : 쉽게 푸는 문제 (🥈실버 5) (Python) (0) | 2023.01.22 |
---|---|
[백준] 1026번 : 보물 (🥈실버 4) (Python) (0) | 2023.01.22 |
[백준] 25304번 : 영수증 (🥉브론즈 5) (JavaScript) (2) | 2023.01.21 |
[백준] 2480번 : 주사위 세개 (🥉브론즈 4) (JavaScript) (0) | 2023.01.21 |
[백준] 2738번 : 행렬 덧셈 (🥉브론즈 5) (JavaScript) (2) | 2023.01.21 |