Skip to content

Commit 26a3a3b

Browse files
committed
125차 2번 문제풀이(참고)
1 parent 434c452 commit 26a3a3b

1 file changed

Lines changed: 42 additions & 0 deletions

File tree

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import sys
2+
import copy
3+
4+
input = sys.stdin.readline
5+
6+
7+
def flip(coins, line):
8+
for x, y in line:
9+
coins[x][y] = 'T' if coins[x][y] == 'H' else 'H'
10+
11+
12+
def dfs(coins, lines, idx, count, min_count):
13+
flat = sum(coins, [])
14+
if flat.count('T') == 9 or flat.count('H') == 9:
15+
return min(count, min_count)
16+
if idx == len(lines): # 더이상 뒤집을 줄이 없을 때
17+
return min_count
18+
19+
result = dfs(copy.deepcopy(coins), lines, idx+1, count, min_count) # 뒤집지 않고 다음 줄로 넘기는 경우
20+
21+
# 뒤집고 넘기는 경우
22+
flipped = copy.deepcopy(coins)
23+
flip(flipped, lines[idx])
24+
result = min(result, dfs(flipped, lines, idx+1, count+1, min_count))
25+
26+
return result
27+
28+
row_lines = [[(i, j) for j in range(3)] for i in range(3)]
29+
col_lines = [[(j, i) for j in range(3)] for i in range(3)]
30+
diag_lines = [[(i, i) for i in range(3)], [(i, 2 - i) for i in range(3)]]
31+
lines = row_lines + col_lines + diag_lines # 나올 수 있는 모든 경우의 수
32+
33+
t = int(input())
34+
for _ in range(t):
35+
coins = []
36+
for _ in range(3):
37+
coins.append(list(input().split()))
38+
res = dfs(coins, lines, 0, 0, float('inf'))
39+
if res != float('inf'):
40+
print(res)
41+
else:
42+
print(-1)

0 commit comments

Comments
 (0)