본문 바로가기

Algorithm/Brute Force

(C++) - 백준(BOJ) 2160번 : 그림 비교 답

반응형

www.acmicpc.net/problem/2160

 

2160번: 그림 비교

N(2≤N≤50)개의 그림이 있다. 각각의 그림은 5×7의 크기이고, 두 가지 색으로 되어 있다. 이때 두 가지의 색을 각각 ‘X’와 ‘.’으로 표현하기로 하자. 이러한 그림들이 주어졌을 때, 가장 비슷

www.acmicpc.net

구현해 brute force하는 문제였습니다.

 

풀이방법

 1. 모든 그림 쌍에 대해 다른 정도를 비교해 계속 그림 정보를 갱신해줍니다.

 2. 답이 한 개이므로 다른 정도 같은 여러 그림의 쌍을 생각할 필요가 없습니다.

 

Code

#include <bits/stdc++.h>
using namespace std;
int n;
vector <vector<string>> picture;
int minPic[2];
int minPivot = 0x7f7f7f7f;

int getDifference(vector<string> a, vector<string> b){
    int cnt = 0;
    for(int i = 0; i < a.size(); i++){
        for(int j = 0; j < a[i].size(); j++){
            if(a[i][j]!=b[i][j])cnt++;
        }
    }
    return cnt;
}

int main(){
    cin >> n;
    for(int pic = 0; pic < n; pic++){
        vector <string> s;
        for(int i = 0; i < 5; i++){
            string tmp;
            cin >> tmp;
            s.push_back(tmp);
        }
        picture.push_back(s);
    }
    for(int i = 0; i < n; i ++){
        vector <string> onePic = picture[i];
        for(int j = i+1; j < n; j++){
            vector <string> secondPic = picture[j];
            int difference = getDifference(onePic,secondPic);
            if(difference < minPivot){
                minPivot = difference;
                minPic[0] = i+1;
                minPic[1] = j+1;
            }
        }
    }
    cout << minPic[0] << ' ' << minPic[1] <<'\n';
}