◼ PS Note/백준

[백준] 1652번 : 누울 자리를 찾아라 (🥉브론즈 1) (JavaScript)

SangYoonLee (SYL) 2023. 1. 21. 00:38
반응형

문제 바로 가기

 

1652번: 누울 자리를 찾아라

첫째 줄에 방의 크기 N이 주어진다. N은 1이상 100이하의 정수이다. 그 다음 N줄에 걸쳐 N개의 문자가 들어오는데 '.'은 아무것도 없는 곳을 의미하고, 'X'는 짐이 있는 곳을 의미한다.

www.acmicpc.net

 


풀이

  • 사용 언어 : 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개 뿐이라고 생각했다.
  • 다른 분들이 작성하신 질문글의 반례를 보고 나서야 오류를 바로 잡을 수 있었다.

 

  • 문제 설명이 좀 모호한 점이 있었던 것을 다른 분들도 공감하시는 것 같아 다행이긴 하지만, 앞으로 문제를 더 잘 읽고 잘 이해해야겠다는 생각이 든다.

 

반응형