문제링크
https://www.acmicpc.net/problem/20125
풀이
일단 위아래좌우 모두 *인 곳이 심장이므로 심장을 먼저 찾고 이를 기준으로 각 신체부위를 측정하는 방식으로 신체를 측정할 수 있었다. 딱히 어려운부분 없고 구현능력을 보는 문제였다.
// https://www.acmicpc.net/problem/20125
let fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
let N = Number(input.shift());
const isInner = (r, c) => {
return r >= 0 && r < N && c >= 0 && c < N;
};
let heart = [undefined, undefined];
for (let r = 0; r < N; ++r) {
for (let c = 0; c < N; ++c) {
// 위,아래,좌측,우측 좌표위치
let nextPosition = [
[r - 1, c],
[r + 1, c],
[r, c - 1],
[r, c + 1],
];
let isHeart = true;
for (let i = 0; i < 4; ++i) {
let [aroundR, aroundC] = nextPosition[i];
if (isInner(aroundR, aroundC) && input[aroundR][aroundC] === "*") {
continue;
} else {
isHeart = false;
break;
}
}
if (isHeart) {
heart = [r, c];
break;
}
}
}
let headLength = 0;
let checkPoint = [heart[0] - 1, heart[1]];
while (isInner(checkPoint[0], checkPoint[1]) && input[checkPoint[0]][checkPoint[1]] === "*") {
++headLength;
--checkPoint[0];
}
let leftArm = 0;
checkPoint = [heart[0], heart[1] - 1];
while (isInner(checkPoint[0], checkPoint[1]) && input[checkPoint[0]][checkPoint[1]] === "*") {
++leftArm;
--checkPoint[1];
}
let rightArm = 0;
checkPoint = [heart[0], heart[1] + 1];
while (isInner(checkPoint[0], checkPoint[1]) && input[checkPoint[0]][checkPoint[1]] === "*") {
++rightArm;
++checkPoint[1];
}
let waist = 0;
checkPoint = [heart[0] + 1, heart[1]];
while (isInner(checkPoint[0], checkPoint[1]) && input[checkPoint[0]][checkPoint[1]] === "*") {
++waist;
++checkPoint[0];
}
--checkPoint[0];
let base = [checkPoint[0], checkPoint[1]];
checkPoint = [base[0] + 1, base[1] - 1];
let leftLeg = 0;
while (isInner(checkPoint[0], checkPoint[1]) && input[checkPoint[0]][checkPoint[1]] === "*") {
++leftLeg;
++checkPoint[0];
}
checkPoint = [base[0] + 1, base[1] + 1];
let rightLeg = 0;
while (isInner(checkPoint[0], checkPoint[1]) && input[checkPoint[0]][checkPoint[1]] === "*") {
++rightLeg;
++checkPoint[0];
}
let answer = `${heart[0] + 1} ${heart[1] + 1}\n${leftArm} ${rightArm} ${waist} ${leftLeg} ${rightLeg}`;
console.log(answer);
'🔒Algorithm' 카테고리의 다른 글
백준[JS] > 14719번 빗물 (0) | 2025.03.06 |
---|---|
백준[JS] > 1446번 지름길 (0) | 2025.03.05 |
백준[JS] > 9655번 돌게임 (0) | 2025.03.05 |
백준[JS] > 11403번 경로 찾기 (0) | 2025.03.03 |
백준[JS] > 7568 덩치 (0) | 2025.03.01 |