[BAEKJOON] 백준 9094: 수학적 호기심 (C#)

2024. 6. 7. 15:41IT/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)

라는 조건을 이용하여 정수 쌍을 세게 구현했다.