알고리즘 풀이

[C#] 백준 14911번 문제풀이

bimtaeur30 2026. 4. 1. 23:06

문제번호: 14911

문제명: 궁합 쌍 찾기

문제링크: https://www.acmicpc.net/problem/14911

문제내용과 예제 입/출력은 위 문제 링크에서 확인해 주시기 바랍니다

 

오늘은 '궁합 쌍 찾기' 문제를 풀었습니다. 해시 셋과 브루트포스 알고리즘을 사용하는 문제입니다. 저는 2중 반복문을 돌면서 입력으로 주어진 숫자들을 i, j로 순회했습니다. i+j가 주어진 숫자와 같다면 쌍을 충족하므로 해시 셋에 두 수중 작은 수를 먼저 오게 해서 Item1, Item2로 삽입해주었습니다. 마지막으로 사전순 정렬을 통해 정답을 출력했습니다.
다음은 정답코드입니다.

 

static void Main()
{
    using StreamReader sr = new StreamReader(Console.OpenStandardInput());
    using StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());

    int[] nums = Array.ConvertAll(sr.ReadLine().Split(), int.Parse);
    int target = int.Parse(sr.ReadLine());

    HashSet<(int, int)> set = new HashSet<(int, int)>();

    int n = nums.Length;

    for (int i = 0; i < n; i++)
    {
        for (int j = i + 1; j < n; j++)
        {
            if (nums[i] + nums[j] == target)
            {
                int a = Math.Min(nums[i], nums[j]);
                int b = Math.Max(nums[i], nums[j]);

                set.Add((a, b)); // 중복 제거
            }
        }
    }

    // 사전순 정렬
    var list = new List<(int, int)>(set);
    list.Sort((x, y) =>
    {
        if (x.Item1 != y.Item1)
            return x.Item1.CompareTo(y.Item1);
        return x.Item2.CompareTo(y.Item2);
    });

    foreach (var pair in list)
    {
        sw.WriteLine($"{pair.Item1} {pair.Item2}");
    }

    sw.WriteLine(list.Count);
}

'알고리즘 풀이' 카테고리의 다른 글

[C#] 백준 9657번 문제풀이  (0) 2026.04.04
[C#] 백준 1912번 문제풀이  (0) 2026.04.02
[C#] 백준 18870번 문제풀이  (0) 2026.03.25
[C#] 백준 1002번 문제풀이  (0) 2026.03.24
[C#] 백준 9465번 문제풀이  (0) 2026.03.22