앵그리 창영

문제

언어

  • JavaScript

순서도

  1. 대각선 길이 구하기
  2. 대각선 길이보다 작은 경우와 큰 경우에 따라서 “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));