본문 바로가기
Algorithm Problem Solving/BaekJoon

[BaekJoon] 백준 2160 그림 비교 (Python / 파이썬)

by ʚ⇜❅🎕̈❄⇝ɞ 2021. 8. 24.
728x90
반응형

BaekJoon 백준 2160 그림 비교 문제는 N개의 그림이 있다. 각각의 그림은 5 ×7의 크기이고, 두 가지 색으로 되어 있다. 이러한 그림들이 N개 주어졌을 때, 가장 비슷한 두 개의 그림을 찾아내는 문제이다. 브루트 포스 알고리즘에 관한 문제로 난이도는 Bronze 1이다.

 

BaekJoon 2160 그림 비교 문제 정보

출처

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

알고리즘 분류

- 문자열 string, 파싱 parsing, 구현

난이도

- 브론즈 1 / Bronze 1

 

그림 비교 문제 요약

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

 

문제 풀이 과정

  1. 그림을 입력받는다.
  2. 서로 중복되지 않도록 그림 2개를 고른 뒤 모든 행과 열을 탐색하여 서로 다른 칸의 개수를 카운트한다.
  3. 매번 비교 후 이때까지 중에 서로 다른 칸의 개수가 제일 적으면 두 그림과 칸 수를 저장한다.
  4. 가장 비슷한 두 개의 그림을 찾아내어 출력한다.

 

코드 및 설명
N = int(input())
pictures = []
minimum = 36
ans1 = ans2 = 0

for i in range(N):
    row = []  # i+1 번째 그림의 행
    for _ in range(5):
        row.append(input())
    pictures.append(row)

for pic1 in range(N):
    for pic2 in range(pic1 + 1, N):
        cnt = 0
        for r in range(5):
            for c in range(7):
                # 그림이 다르다면
                if pictures[pic1][r][c] != pictures[pic2][r][c]:
                    cnt += 1
        # 이 때까지의 비교 중 가장 비슷하다면 다른 칸 개수, 그림 2개 저장
        if minimum > cnt:
            minimum = cnt
            ans1 = pic1
            ans2 = pic2

print(f'{ans1 + 1} {ans2 + 1}')

BaekJoon 백준 2160 그림 비교 문제를 파이썬 python 브루트 포스 알고리즘으로 풀어보았다. 난이도는 Bronze 브론즈 1이다. 

728x90
반응형

댓글