[BAEKJOON] 백준 2160: 그림 비교 (C#)

2024. 6. 7. 15:58IT/BaekJoon

문제 링크

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

 

 

문제

N(2 ≤ N ≤ 50)개의 그림이 있다. 각각의 그림은 5×7의 크기이고, 두 가지 색으로 되어 있다. 이때 두 가지의 색을 각각 ‘X’와 ‘.’으로 표현하기로 하자. 이러한 그림들이 주어졌을 때, 가장 비슷한 두 개의 그림을 찾아내는 프로그램을 작성하시오. 두 개의 그림에서 다른 칸의 개수가 가장 적을 때, 두 개의 그림이 가장 비슷하다고 하자.

예를 들어 위와 같은 두 개의 그림이 주어졌을 때, 색칠한 부분이 서로 다르게 된다. 위의 그림은 5개의 칸이 서로 다르다. 이와 같이 서로 다른 칸의 개수가 가장 작은 경우를 찾는 것이다.

 

 

입력

첫째 줄에 N이 주어진다. 다음 5×N개의 줄에 7개의 문자로 각각의 그림이 주어진다.

 

 

출력

첫째 줄에 가장 비슷한 두 그림의 번호를 출력한다. 그림의 번호는 입력되는 순서대로 1, 2, …, N이다. 번호를 출력할 때에는 작은 것을 먼저 출력한다. 입력은 항상 답이 한 가지인 경우만 주어진다.

 

 

 

통과한 답안

namespace _2160
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int N = int.Parse(Console.ReadLine());
            string[,] pictures = new string[N, 5];

            for (int i = 0; i < N * 5; i++)
            {
                int pictureIdx = i / 5;
                int lineIdx = i % 5;
                pictures[pictureIdx, lineIdx] = Console.ReadLine();
            }

            int minDiff = int.MaxValue;
            int picture1 = 0;
            int picture2 = 0;

            for (int i = 0; i < N; i++)
            {
                for (int j = i + 1; j < N; j++)
                {
                    int diff = ComparePictures(pictures, i, j);
                    if (diff < minDiff)
                    {
                        minDiff = diff;
                        picture1 = i + 1;
                        picture2 = j + 1;
                    }
                }
            }

            Console.WriteLine($"{picture1} {picture2}");
        }

        static int ComparePictures(string[,] pictures, int i, int j)
        {
            int diff = 0;
            for (int line = 0; line < 5; line++)
            {
                string picture1Line = pictures[i, line];
                string picture2Line = pictures[j, line];
                for (int k = 0; k < 7; k++)
                {
                    if (picture1Line[k] != picture2Line[k])
                    {
                        diff++;
                    }
                }
            }

            return diff;
        }
    }
}

 

5 X 7 크기의 그림이 N개 주어질 때,

각각 두 개의 그림을 비교하여 그 차이가 제일 작은 그림 쌍을 찾는 문제이다.

 

N개의 그림을 2차원 string 배열로 저장한 뒤에

두 그림의 차이를 계산하는 메서드를 이용하여

모든 그림 쌍의 차이를 비교하여 가장 작은 쌍을 찾고

이를 출력하도록 구현하였다.