๋ฌธ์
๋งค์ง ์คํ๋ 1๋ถํฐ 12๊น์ง ์ซ์๊ฐ ํฅ์ฌ๊ทธ๋จ(hexagram)์ ์ฑ์์ ธ ์๋ ๋ชจ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.

๋งค์ง ์คํ์ ์ด๋ฆ์ ๋งค์ง์ด ๋ค์ด๊ฐ๋ ์ด์ ๋ ์ซ์ ๋ค ๊ฐ๋ก ์ด๋ฃจ์ด์ง ์ค์ ์ซ์๋ฅผ ๋ชจ๋ ํฉํ๋ฉด 26์ด ๋๊ธฐ ๋๋ฌธ์ด๋ค. ์์ ๊ทธ๋ฆผ์ ์ฌ์ฏ ์ค์ ์ฐ์ฌ ์๋ ์ซ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- 1 + 4 + 10 + 11
- 11 + 5 + 3 + 7
- 7 + 6 + 12 + 1
- 2 + 10 + 5 + 9
- 9 + 3 + 6 + 8
- 8 + 12 + 4 + 2
๋งค์ง ์คํ๋ฅผ ์ฑ์ฐ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์๋ค. ์ผ๋ถ๋ง ์ฑ์์ง ๋งค์ง ์คํ๊ฐ ์ฃผ์ด์ก์ ๋, ์๋ฅผ ์ ๋ถ ๋ค ์ฑ์์ ๋งค์ง ์คํ๋ฅผ ๋ง๋๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
๋งค์ง ์คํ์ ๋ชจ์์ด ์ฃผ์ด์ง๋ค. ์๊ฐ ์ฑ์์ ธ ์์ง ์์ ๊ณณ์ x๋ก, ์ฑ์์ ธ ์๋ ๊ณณ์ 'A'๋ถํฐ 'L'๊น์ง ์ํ๋ฒณ์ผ๋ก ์ฑ์์ ธ ์๋ค. i๋ฒ์งธ ์ํ๋ฒณ์ ์ซ์ i๋ฅผ ์๋ฏธํ๋ค. '.'๋ ๋งค์ง ์คํ์ ํํ๋ฅผ ๋ง๋ค๊ธฐ ์ํด์ ์ฌ์ฉํ๋ ๋ฌธ์์ด๋ค. ๋ชจ๋ ์ ๋ ฅ์ ์์ ์ ๋ ฅ๊ณผ ๊ฐ์ ํํ๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๋งค์ง ์คํ๋ฅผ ๋ง๋ค ์ ์๋ ๋ฐฉ๋ฒ ์ค์ ์ฌ์ ์์ผ๋ก ๊ฐ์ฅ ์์๋ ๋ฐฉ๋ฒ์ ์ถ๋ ฅํ๋ค. (๋ชจ๋ ์ค์ ์์๋๋ก ๋ถ์ฌ์ ํ๋์ ๋ฌธ์์ด๋ก ๋ง๋ ๋ค, ์ฌ์ ์์ผ๋ก ๋น๊ตํ๋ค.) ํญ์ ์ ๋ต์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ๋ง ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
๋ฌธ์ ํ์ด
- DFS๋ฅผ ์ด์ฉํ ์์ ํ์์ ํ๋ค!
- ์ฐ์ , A~L๊น์ง 12๊ฐ์ ๋๋ฌธ์ ์ํ๋ฒณ์ ์ด๋ฏธ ๊ฐ์ง๊ณ ์๋์ง ์ ์ฅํ๊ธฐ ์ํ ๋ฐฐ์ด visited๋ฅผ ์ ์ธํ๋ค.
- ๊ทธ๋ฆฌ๊ณ 'x'๊ฐ ์์นํ ์ขํ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ฐฐ์ด X๋ฅผ ์ ์ธํ๊ณ , 'x'์ ๊ฐ์๋ฅผ X_cnt ๋ณ์์ ์ ์ฅํด์ค๋ค.
- ์ ๋ ฅ๋ฐ์ hexagram์ ์ ๋ณด๋ฅผ ๋๋ฉด์ ์์์ ์ค๋ช ํ ๊ฐ๊ฐ์ ๋ฐฐ์ด์ ๊ฐ์ ์ ์ฅํ๋ค.
- ๊ทธ๋ฆฌ๊ณ DFS๋ฅผ ์ด์ฉํด์ ์์์ ์ ์ฅํ X ๋ฐฐ์ด์ ์ ์ฅ๋ 'x'์ ์์น๋ฅผ ์ฐจ๋ก๋ก ๋๋ฉด์, ํด๋น ์์น์ A~L ์ค ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ํ๋ฒณ์ ๋ฃ์ด์ค๋ค.
- ๊ทธ ์ํ์์ DFS๋ก ์ฌ๊ทํ์์ ํ๋ค. ํ์ ๊ณผ์ ์์ 'x'์ ์์น์ ์ํ๋ฒณ์ ๋ฃ์ด์ค ๊ฐ์ cnt๊ฐ X_cnt์ ๋์ผํด์ก๋ค๋ฉด, 6๊ฐ์ ๋ชจ๋ ์ค์ด ๊ฐ ๊ฐ์ ๋ํ์ ๋ 26์ด ๋๋์ง calculate_hexagram() ํจ์๋ฅผ ์ด์ฉํด์ ํ์ธํ๋ค. ๋ง์ฝ ์ด ์กฐ๊ฑด์ ๋ง์กฑํ๋ค๋ฉด, ์ฐ๋ฆฌ๋ ์ฒซ ๋ฒ์งธ 'x'์ ์์น๋ถํฐ ์ฐจ๋ก๋๋ก, 'A'๋ถํฐ 'L'๊น์ง ์ฐจ๋ก๋๋ก ํ์ํ๊ณ ์์ผ๋ฏ๋ก ๊ฐ์ฅ ๋จผ์ ์ด ์กฐ๊ฑด์ ๋ง์กฑํ๋ hexagram์ด ์ฌ์ ์์ผ๋ก ๊ฐ์ฅ ์์๋ ์ ๋ต์ด ๋๋ค.
- ๊ทธ๋ฌ๋ฏ๋ก ์กฐ๊ฑด์ ๋ง์กฑํ์๋ง์ ํด๋น hexagram์ ์ถ๋ ฅํ๊ณ ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํ๋ค.
import sys
hexagram=[]
for _ in range(5):
line=list(sys.stdin.readline().strip())
hexagram.append(line)
# A~L
visited=[0]*(13)
# x์ ์ขํ
X=[]
# x์ ๊ฐ์
X_cnt=0
for i in range(5):
for j in range(9):
if hexagram[i][j]=='x':
X.append((i,j))
X_cnt+=1
elif hexagram[i][j]=='.':
pass
else:
visited[ord(hexagram[i][j])-65+1]=1
def calculate_hexagram():
if (ord(hexagram[0][4])-65+1)+(ord(hexagram[1][3])-65+1)+(ord(hexagram[2][2])-65+1)+(ord(hexagram[3][1])-65+1)!=26:
return False
if (ord(hexagram[0][4])-65+1)+(ord(hexagram[1][5])-65+1)+(ord(hexagram[2][6])-65+1)+(ord(hexagram[3][7])-65+1)!=26:
return False
if (ord(hexagram[1][1])-65+1)+(ord(hexagram[1][3])-65+1)+(ord(hexagram[1][5])-65+1)+(ord(hexagram[1][7])-65+1)!=26:
return False
if (ord(hexagram[3][1])-65+1)+(ord(hexagram[3][3])-65+1)+(ord(hexagram[3][5])-65+1)+(ord(hexagram[3][7])-65+1)!=26:
return False
if (ord(hexagram[1][1])-65+1)+(ord(hexagram[2][2])-65+1)+(ord(hexagram[3][3])-65+1)+(ord(hexagram[4][4])-65+1)!=26:
return False
if (ord(hexagram[1][7])-65+1)+(ord(hexagram[2][6])-65+1)+(ord(hexagram[3][5])-65+1)+(ord(hexagram[4][4])-65+1)!=26:
return False
return True
# idx : ๋ฐฐ์ด X์ ์ ์ฅ๋ x๊ฐ ์์นํ idx๋ฒ์งธ ์ขํ
# cnt : ๋ค๋ฅธ ์ํ๋ฒณ์ผ๋ก ์ฑ์์ง x์ ๊ฐ์
def DFS(idx, cnt):
if cnt==X_cnt:
# ๋ชจ๋ ์ค์ ํฉ์ด 26์ด๋ฉด hexagram ์ถ๋ ฅํ๊ณ ํ๋ก๊ทธ๋จ ์ข
๋ฃ
if calculate_hexagram():
for hex in hexagram:
print(*hex, sep='')
sys.exit(0)
# ์๋๋ผ๋ฉด DFS return
return
for i in range(1,13):
# ์ด๋ฏธ ์ฑ์์ง ์ํ๋ฒณ์ด๋ผ๋ฉด ๋ค์ ์ํ๋ฒณ ์ฒดํฌ
if visited[i]==1:
continue
# ํ์ฌ ์ํ๋ฒณ์ผ๋ก ํ์ฌ idx์ ํด๋นํ๋ x์ ์์น๋ฅผ ์ฑ์ด๋ค๋ฉด
visited[i]=1
hexagram[X[idx][0]][X[idx][1]]=chr(65+i-1)
DFS(idx+1, cnt+1)
hexagram[X[idx][0]][X[idx][1]]='x'
visited[i]=0
DFS(0,0)
'์๊ณ ๋ฆฌ์ฆ > ๊ตฌํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 20006 ๐ฅ] ๋ญํน์ ๋๊ธฐ์ด (1) | 2023.10.07 |
---|---|
[๋ฐฑ์ค 3758 ๐ฅ] KCPC (0) | 2023.10.07 |
[๋ฐฑ์ค 1138 ๐ฅ] ํ ์ค๋ก ์๊ธฐ (0) | 2023.09.12 |
[๋ฐฑ์ค 24337 ๐ฅ] ๊ฐํฌ์ ํ (0) | 2023.08.15 |
[๋ฐฑ์ค 22251 ๐ฅ] ๋น๋ฐ ํธ์ (0) | 2023.08.11 |