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

2023. 1. 21. 00:38·◼ PS Note/백준
반응형

문제 바로 가기

 

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

 

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

 

반응형

'◼ 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
'◼ PS Note/백준' 카테고리의 다른 글
  • [백준] 1292번 : 쉽게 푸는 문제 (🥈실버 5) (Python)
  • [백준] 1026번 : 보물 (🥈실버 4) (Python)
  • [백준] 25304번 : 영수증 (🥉브론즈 5) (JavaScript)
  • [백준] 2480번 : 주사위 세개 (🥉브론즈 4) (JavaScript)
SangYoonLee (SYL)
SangYoonLee (SYL)
Slow, But Steady Wins The Race 😎
    반응형
  • SangYoonLee (SYL)
    ◆ Slow, But Steady ◆
    SangYoonLee (SYL)
  • 전체
    오늘
    어제
    • ◻ 전체 글 수 : (133)
      • ✪ 취미, 경험 회고 및 일상 (26)
        • [취미] Room Escape (2)
        • [회고] IT 관련 경험 회고 (18)
        • [일상] 일상 생각 (4)
        • [일상] 독후감 (1)
      • ◼ FrontEnd (31)
        • Web & HTML, CSS (10)
        • JavaScript (4)
        • TypeScript (1)
        • ReactJS (16)
      • ◼ CS (3)
        • 자료구조 & 알고리즘 (1)
        • 컴퓨터 구조 (1)
        • 운영체제 (1)
      • ◼ PS Note (40)
        • 백준 (38)
        • 프로그래머스 (2)
      • ◼ IT Etc. (33)
        • (Until 2021) (21)
        • Python (6)
        • C | C# | C++ (1)
        • Git (1)
        • Unity (4)
        • Game Dev. (0)
  • 블로그 메뉴

    • 홈
    • 💻 GitHub
    • 🟢 Velog
    • 🧩 온라인 방탈출 출시 작품 모음
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    관심사의 분리
    wecode
    React
    unity
    유니티
    프로그래머스
    개인 프로젝트
    주간 회고
    Python
    회고
    후기
    JavaScript
    백준
    리엑트
    1929
    소수 구하기
    Cpp
    코딩 일기
    코드숨
    CodeSoom
    프로젝트
    방탈출고사
    알고리즘
    Component
    pygame
    더라비린스
    미궁 게임
    파이썬
    위코드
    C++
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
SangYoonLee (SYL)
[백준] 1652번 : 누울 자리를 찾아라 (🥉브론즈 1) (JavaScript)
상단으로

티스토리툴바