본문 바로가기
알고리즘/BOJ

[Python] 백준 1285번: 동전 뒤집기

by PIAI 2021. 9. 14.

 

1285번: 동전 뒤집기 (acmicpc.net)

 

1285번: 동전 뒤집기

첫째 줄에 20이하의 자연수 N이 주어진다. 둘째 줄부터 N줄에 걸쳐 N개씩 동전들의 초기 상태가 주어진다. 각 줄에는 한 행에 놓인 N개의 동전의 상태가 왼쪽부터 차례대로 주어지는데, 앞면이 위

www.acmicpc.net

1. 비트마스크로 동전의 가로를 뒤집고 안뒤집은 경우를 모두 확인한다.

2. 세로에서 뒤집힌 동전의 수가 더 적으면 그대로 놔두고 더 많으면 뒤집는다.

 

n = int(input())
coin = [list(input()) for _ in range(n)]
ans = n * n + 1

for bit in range(1 << n):
    tmp = [coin[i][:] for i in range(n)]
    for i in range(n):
        if bit & (1 << i):
            for j in range(n):
                if tmp[i][j] == 'H':
                    tmp[i][j] = 'T'
                else:
                    tmp[i][j] = 'H'

    tot = 0
    for i in range(n):
        cnt = 0
        for j in range(n):
            if tmp[j][i] == 'T':
                cnt += 1
        tot += min(cnt, n-cnt)
    ans = min(ans, tot)

print(ans)

댓글