BOJ[1652] - 누울 자리를 찾아라 by JavaScript
누울 자리를 찾아라
문제
언어
- JavaScript
순서도
- 위에서부터 아래로 내려가며 한 줄에 연속해서 2 칸 이상의 빈칸의 경우 세기
- 왼쪽부터 오른쪽으로 가며 한 줄에 연속해서 2 칸 이상의 빈칸의 경우 세기
- 가로로 누울 수 있는 경우의 개수와 세로로 누울 수 있는 경우의 개수 출력
문제 풀이 step 1
- N x N 크기의 방이 주어지는데 그 방에는 옮길 수 없는 짐이 놓여있습니다. 영식이가 방에서 잘 수 있게 가로로 누울 수 있는 자리와 세로로 누울 수 있는 자리를 세서 출력해줍시다.
- 우선, 가로로 누울 수 있는 자리를 먼저 셉니다.
- 위에서부터 아래로 내려가며 한 줄씩 검사합니다.
- 한 줄에 똑바로 연속해서 2 칸 이상의 빈칸이 존재하면 누울 수 있는 자리로 간주하고 개수를 세어줍니다.
- 그리고 세로로 누울 수 있는 자리를 셉니다.
- 왼쪽부터 오른쪽으로 가며 한 줄씩 검사합니다.
- 한 줄에 똑바로 연속해서 2 칸 이상의 빈칸이 존재하면 누울 수 있는 자리로 간주하고 개수를 세어줍니다.
- 위 과정을 통해서 구한 가로로 누울 수 있는 자리의 개수와 세로로 누울 수 있는 자리의 개수를 출력합니다.
소스 코드
const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n");
const solution = (input) => {
const n = Number(input[0]);
const room = input.slice(1, n + 1).map((v) => v.split(""));
let horizontal = 0;
let vertical = 0;
// 한 줄씩 검사
for (let i = 0; i < n; i++) {
// 세로로 누울 수 있는 경우 세기
let empty = 0;
for (let j = 0; j < n; j++) {
// 빈 칸이면 empty 증가
if (room[i][j] === ".") empty += 1;
// 짐이면 빈칸이 2 이상인지 검사
if (room[i][j] === "X") {
if (empty >= 2) horizontal += 1;
empty = 0;
}
}
// 한 줄을 다 검사했을 때 빈칸이 2 이상인지 검사
if (empty >= 2) horizontal += 1;
// 가로로 누울 수 있는 경우도 위와 마찬가지로 동작
empty = 0;
for (let j = 0; j < n; j++) {
if (room[j][i] === ".") empty += 1;
if (room[j][i] === "X") {
if (empty >= 2) vertical += 1;
empty = 0;
}
}
if (empty >= 2) vertical += 1;
}
return `${horizontal} ${vertical}`;
};
console.log(solution(input));