์•Œ๊ณ ๋ฆฌ์ฆ˜/๊ตฌํ˜„

[๋ฐฑ์ค€ 3967 ๐Ÿฅ‡] ๋งค์ง ์Šคํƒ€

1eehyunji 2023. 10. 7. 18:45

๋ฌธ์ œ

๋งค์ง ์Šคํƒ€๋Š” 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)