https://www.acmicpc.net/problem/2160
문제
> 두 가지 색으로 이루어진 5x7크기의 그림 N개가 있다.
> 두 가지의 색을 x와 .으로 표현하자.
> 다른 칸의 개수가 가장 적을 때 가장 비슷하다고 하자. 가장 비슷한 두 개의 그림을 찾아내라.
접근
각 그림을 입력받아 표로 생성한 후 가능한 경우를 모두 비교한다. 그 중 차이가 가장 적은 그림을 비교한다.
최종비교 후 출력한다.
문제해결
> 3차원 벡터로 그림의 번호, 행과 열로 입력받아 각 그림을 정의한다.
> 각각의 그림을 중복되는 비교 없이 비교한다.
> 같지않은 부분이 있으면 cnt값을 누적하고 가장 차이가 큰 경우와 비교하며 차이의 최소값을 갱신한다.
> 최소값이 갱신되면 해당 그림의 번호를 저장하고 최종적으로 차이가 가장 적은 그림을 출력한다.
코드
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int N;
cin >> N;
int rst = 35;
int arr[2] = { 1, 2 };
vector<vector<vector<char>>> picture(N, vector<vector<char>>(5, vector<char>(7)));
for (int i = 0; i < N; i++) {
for (int r = 0; r < 5; r++) {
string str;
cin >> str;
for (int c = 0; c < 7; c++) {
picture[i][r][c] = str[c];
}
}
}
for (int i = 0; i < N-1; i++)
{
for (int j = i+1; j < N; j++)
{
int cnt = 0;
for (int r = 0; r < 5; r++)
{
for (int c = 0; c < 7; c++)
{
if (picture[i][r][c] != picture[j][r][c])
{
cnt++;
}
}
}
if (cnt < rst)
{
rst = cnt;
arr[0] = i+1;
arr[1] = j+1;
}
}
}
cout << arr[0] << " " << arr[1] << '\n';
}

후기
다중 반복문 처리가 복잡하고 처리 순서에 대해 어려웠다.
계속 틀리길래 반복문 처리나 입력 처리가 문제일 줄 알았지만 결과값 그림을 저장하는 arr 배열의 초기값에 문제가 있었다. 사소한 예외를 꼼꼼히 보자