BOJ[3034] - 앵그리 창영 by JavaScript
앵그리 창영
문제
언어
- JavaScript
순서도
- 대각선 길이 구하기
- 대각선 길이보다 작은 경우와 큰 경우에 따라서 “DA”, “NE” 출력하기
문제 풀이 step 1
- 박스의 가로와 세로 크기가 주어질 때, 주어진 각각의 성냥이 박스에 들어가는지 안들어가는지 판별하는 문제입니다.
- 단, 성냥이 박스에 들어가려면, 박스의 밑 면에 성냥이 닿아야 합니다.
- 우선, 박스에 성냥을 놓는 경우를 생각해보겠습니다.
- 완전 세워서 넣는 경우
- 완전 눕혀서 넣는 경우
- 비스듬히 넣는 경우
- 각 경우 중에서 가장 긴 성냥을 넣을 수 있는 경우는 비스듬히 넣는 경우입니다.
- 따라서 각 성냥을 박스에 비스듬히 넣을 수 있는지 없는지 판별하면 됩니다.
- 그러기 위해서는 박스의 대각선 길이를 구해야 합니다.
- 대각선 길이는 피타고라스의 방정식을 이용해서 “C = Math.sqrt(A * A + B * B)” 와 같이 구하면 됩니다.
- 저는 오차 방지를 위해서 근호 연산을 생략하고, 제곱수의 형태로 바로 비교를 진행했습니다.
- 각 성냥에 대해서 검사를 진행하고 “DA”, “NE” 를 출력하면 됩니다.
- 추가 설명은 주석으로 작성하겠습니다.
소스 코드
const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n");
const solution = (input) => {
const [n, w, h] = input[0].split(" ").map(Number);
// 대각선의 길이 (근호 연산을 하지 않은 제곰수의 형태)
const diagonal = w * w + h * h;
let res = "";
for (let i = 1; i < 1 + n; i++) {
// 높이
const height = Number(input[i]);
// 박스에 비스듬히 넣을 수 있는지 검사
if (height * height <= diagonal) {
res += "DA\n";
} else {
res += "NE\n";
}
}
return res;
};
console.log(solution(input));