PS (C, C++)

[백준/C & C++] 3034 앵그리 창영

최연재 2022. 9. 15. 12:58

https://www.acmicpc.net/problem/3034

 

3034번: 앵그리 창영

첫째 줄에 던진 성냥의 개수 N과 박스의 가로 크기 W와 세로 크기 H가 주어진다. (1 ≤ N ≤ 50, 1 ≤ W, H ≤ 100) 다음 N개 줄에는 성냥의 길이가 주어진다. 길이는 1보다 크거나 같고 1000보다 작거나

www.acmicpc.net

코드 (C)

#include <stdio.h>
#include <math.h>

int main()
{
	int n, width, height, max, input;
	scanf("%d %d %d", &n, &width, &height);

	max = sqrt((width * width) + (height * height));

	for (int i = 0; i < n; i++)
	{
		scanf("%d", &input);
		if (input <= max) printf("DA\n");
		else printf("NE\n");
	}
	return 0;
}

코드 (C++)

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
	int n, width, height, input,max;
	cin >> n >> width >> height;
    
	max = sqrt((width * width) + (height*height));

	for (int i = 0; i < n; i++)
	{
		cin >> input;
		if (input <= max) cout << "DA\n";
		else cout << "NE\n";
	}

	return 0;
}

코드설명 

문제를 풀기 위해서는 박스의 대각선 길이를 구하고, 길이와 입력값을 비교하면 된다. 

( 박스에 들어갈 수 있는 성냥의 최대 길이는 대각선 길이와 같다.)

 

따라서 성냥의 개수, 박스의 가로 길이, 박스의 세로길이를 입력받는다. 

그 후 max 변수에 박스의 대각선 길이를 구해 대입한다. 

 

성냥의 개수만큼 반복문을 돌면서 만약 성냥 길이가 max보다 클 경우에는 NE를 출력하고, 같거나 작은 경우에는 DA를 출력한다. 

느낀 점

처음에 문제를 읽으면서 '뭘 구해야 되는 거지?'라고 생각했는데, 문제의 마지막 두 줄과 예시를 통해 구해야 할 것을 파악해서 문제를 풀었다.