작성일 :

문제 링크

3034번 - 앵그리 창영이

설명

성냥개비가 직사각형 박스 안에 들어갈 수 있는지를 판단하는 문제입니다.

  • 박스는 너비와 높이를 가지는 직사각형입니다.
  • 성냥개비는 회전이 가능하며, 박스에 대각선 방향으로 들어갈 수 있다면 적절한 방향으로 넣을 수 있습니다.
  • 따라서 성냥개비의 길이가 박스의 대각선 길이 이하이면 박스 안에 들어갈 수 있습니다.
  • 각 성냥개비에 대해 결과를 판별하고, 가능하면 DA를, 불가능하면 NE를 출력합니다.

접근법

  1. 입력으로 다음 정보를 차례로 입력받습니다:
    • 성냥개비 개수
    • 박스의 너비
    • 박스의 높이
  2. 먼저 박스의 대각선 길이를 구합니다. 이는 피타고라스의 정리에 의해 다음과 같이 계산됩니다:
\[\text{대각선 길이} = \sqrt{(\text{너비})^2 + (\text{높이})^2}\]
  1. 각 성냥개비의 길이를 입력받아, 박스의 대각선보다 짧거나 같다면 DA, 그렇지 않으면 NE를 출력합니다.
  • sqrt를 사용하는 대신, 제곱값으로 비교하면 오차 없이 처리할 수도 있습니다.

Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;

class Program {
  static void Main() {
    var input = Console.ReadLine().Split();
    int count = int.Parse(input[0]);
    int width = int.Parse(input[1]);
    int height = int.Parse(input[2]);

    double maxLen = Math.Sqrt(width * width + height * height);

    for (int i = 0; i < count; i++) {
      int match = int.Parse(Console.ReadLine());
      Console.WriteLine(match <= maxLen ? "DA" : "NE");
    }
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <bits/stdc++.h>

using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int cntMatch, widthBox, lengthBox;
  cin >> cntMatch >> widthBox >> lengthBox;

  int availSize = sqrt(widthBox * widthBox + lengthBox * lengthBox);
  for (int i = 0; i < cntMatch; i++) {
    int sizeMatch; cin >> sizeMatch;
    if (sizeMatch > availSize) cout << "NE\n";
    else cout << "DA\n";
  }

  return 0;
}