문제출처: https://www.acmicpc.net/problem/11312


문제

무엇이든 덮어버리는 것을 좋아하는 지은이는 한변의 길이가 A인 정삼각형을 한변의 길이가 B인 정삼각형으로 완전히 덮어 버리고자 한다. 

두개의 정수 A, B 가 주어지고, B ≤ A 이고, A를 B로 나눌수 있을때, 한 변의 길이가 A인 정삼각형을 완전하게 덮기 위한, 한변의 길이가 B인 정삼각형의 개수를 구하라.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. (T ≤ 1000)

각각의 테스트 케이스는 한줄로 이루어져 있으며 두개의 정수 A, B 가 (1 ≤ B ≤ A ≤ 1,000,000, B|A) 주어진다.


출력

각 테스트 케이스마다 한변의 길이가 A인 정삼각형을 완벽하게 덮을 수 있는 한변의 길이가 B인 정삼각형의 최소 개수를 출력한다.


풀이

규칙찾기문제입니다. 노트에 알고리즘을 설계하고 그것을 소스코드로 구현하는 능력을 기르기 위해 일부러 노트에 카테고리명을 노트에풀기라고 지었습니다.

규칙을 찾아볼까요? (그려보면 암) 2 1 일 때 답=4, 3 1 일때 답=9,  4 1 일때 답=16 입니다. 따라서 b가1일때 정답은 a^2이죠. 그리고 문제조건에의해 a%b=0이어야하므로  4 2일때를보면 4, 그리고 6 2 일 때를보면 9, 6 3일때는 4입니다. 결국 정답은 (a/b)^2가됩니다. 주의할것은 int형범위를 넘길 수 있으므로 longlong형으로 정답을 출력해야합니다.


코드

#pragma warning(disable:4996)
#include<iostream>
using namespace std;
int main()
{
	int t;
	long long a, b;
	scanf("%d", &t);
	for (int i = 0; i < t; i++)
	{
		scanf("%lld%lld", &a, &b);
		printf("%lld\n", a / b * a / b);
	}
}


결과

+ Recent posts