[BAEKJOON] 백준 9094: 수학적 호기심 (C#)
2024. 6. 7. 15:41ㆍIT/BaekJoon
문제 링크
https://www.acmicpc.net/problem/9094
문제
두 정수 n과 m이 주어졌을 때, 0 < a < b < n인 정수 쌍 (a, b) 중에서 (a2+b2+m)/(ab)가 정수인 쌍의 개수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, n과 m이 주어진다. 두 수는 0보다 크고, 100보다 작거나 같다.
출력
각 테스트 케이스마다 문제의 조건을 만족하는 (a, b)쌍의 개수를 출력한다.

통과한 답안
namespace _9094
{
internal class Program
{
static void Main(string[] args)
{
int T = int.Parse(Console.ReadLine());
for (int i = 0; i < T; i++)
{
string[] inputs = Console.ReadLine().Split(' ');
int n = int.Parse(inputs[0]);
int m = int.Parse(inputs[1]);
int cnt = 0;
for (int a = 1; a < n; a++)
{
for (int b = a + 1; b < n; b++)
{
if ((a * a + b * b + m) % (a * b) == 0)
{
cnt++;
}
}
}
Console.WriteLine(cnt);
}
}
}
}
두 정수 n과 m이 주어졌을 때, 0 < a < b < n인 정수 쌍 (a, b) 중에서
(a * a + b * b + m) / (a * b)가 정수인 쌍의 개수를 구하는 문제이다.
언뜻보기에는 어려워보이는 문제이지만,
주어진 조건에 따라서 그대로 구현하면 되는 문제이다.
주어진 조건을 받아온 후에 정수 쌍을 세줄 cnt를 선언하고
for (int a = 1; a < n; a++)
{
for (int b = a + 1; b < n; b++)
{
if ((a * a + b * b + m) % (a * b) == 0)
{
cnt++;
}
}
}
위와 같이 a는 1부터 시작하고, b는 a + 1부터 시작하는 형태로 범위를 설정하고,
주어진 조건인 (a * a + b * b + m) / (a * b) 을 적용하여
if ((a * a + b * b + m) % (a * b) == 0)
라는 조건을 이용하여 정수 쌍을 세게 구현했다.
'IT > BaekJoon' 카테고리의 다른 글
[BAEKJOON] 백준 2546: 경제학과 정원영 (C#) (1) | 2024.06.07 |
---|---|
[BAEKJOON] 백준 2160: 그림 비교 (C#) (1) | 2024.06.07 |
[BAEKJOON] 백준 2998: 8진수 (C#) (0) | 2024.06.07 |
[BAEKJOON] 백준 2979: 트럭 주차 (C#) (0) | 2024.06.07 |
[BAEKJOON] 백준 2909: 캔디 구매 (C#) (0) | 2024.06.06 |