μ•Œκ³ λ¦¬μ¦˜ 문제/BOJ_Python

[BOJ/Step14] 2580 : μŠ€λ„μΏ  (Python)

NaNaRinπŸ™ƒ 2021. 2. 22. 16:19

www.acmicpc.net/problem/2580

 

2580번: μŠ€λ„μΏ 

μŠ€λ„μΏ λŠ” 18μ„ΈκΈ° μŠ€μœ„μŠ€ μˆ˜ν•™μžκ°€ λ§Œλ“  '라틴 μ‚¬κ°ν˜•'μ΄λž‘ νΌμ¦μ—μ„œ μœ λž˜ν•œ κ²ƒμœΌλ‘œ ν˜„μž¬ λ§Žμ€ 인기λ₯Ό λˆ„λ¦¬κ³  μžˆλ‹€. 이 κ²Œμž„μ€ μ•„λž˜ κ·Έλ¦Όκ³Ό 같이 κ°€λ‘œ, μ„Έλ‘œ 각각 9κ°œμ”© 총 81개의 μž‘μ€ 칸으둜 이루

www.acmicpc.net


μ•„λ‹ˆ λ‚˜ μ§„μ§œ λŒμ•„λ²„λ¦¬κ² μŒ

μ˜ˆμ œλŠ” λ§žλŠ”λ° 계속 μ–΄λ–»κ²Œ 고쳐도 ν‹€λ Έλ‚˜κ³  λ‚˜μ™€μ„œ μ§„μ§œ

μ˜›λ‚ μ— ν’€λ˜ μŠ€λ„μΏ  μ±… μ°Ύμ•„μ„œ 제일 μ–΄λ €μš΄ λ¬Έμ œλ“€λ‘œ ν•΄λ΄€λŠ”λ° λ‹€ μ •λ‹΅ 잘 λ‚˜μ˜€λŠ”λ°

 

λŒ€μ²΄

λŒ€μ²΄

λŒ€μ²΄μ²΄γ…”γ…”μ—μ—₯

μ–΄λ””κ°€ ν‹€λ Έλ‹€λŠ”κ±°μž„ λŒμ•„λ²„λ € μ§„μ§œ

λ°±μ€€ μ΄λ†ˆμžμ‹λ“€μ€ ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€λ₯Ό μ˜€λ°±κ°œμ”© 내놔라... μ§„μ§œ λ‹€ λ•Œλ € λΆ€μˆ˜λŸ¬ κ°€κΈ° 전에.....

μ™œ 틀린건지라도 μ’€ μ•Œλ €μ€˜ μ œλ°”λΌμ•„μ•„γ…μ•„λΌλž„

 

μ„€λͺ…은 μƒλž΅ν•˜κ² λ‹€.. ν‹€λ Έλ‹€μž–μ•„ μ  μž₯ γ…œ

python
λ‹«κΈ°
# 2580.py def check(x, y, num): ​​​​ch_row = sudoku[x] ​​​​ch_col = [sudoku[i][y] for i in range(9)] ​​​​a = (x // 3) * 3 ​​​​b = (y // 3) * 3 ​​​​ch_block = sudoku[a][b:b + 3] + sudoku[a + 1][b:b + 3] + sudoku[a + 2][b:b + 3] ​​​​if num in ch_row: ​​​​​​​​return False ​​​​elif num in ch_col: ​​​​​​​​return False ​​​​elif num in ch_block: ​​​​​​​​return False ​​​​else: ​​​​​​​​return True def sdk(zeros): ​​​​if not zeros: ​​​​​​​​for i in sudoku: ​​​​​​​​​​​​print(' '.join(map(str, i))) ​​​​​​​​return ​​​​for t in range(1, 10): ​​​​​​​​i, j = zeros.pop() ​​​​​​​​if check(i, j, str(t)): ​​​​​​​​​​​​sudoku[i][j] = str(t) ​​​​​​​​​​​​sdk(zeros) ​​​​​​​​​​​​sudoku[i][j] = '0' ​​​​​​​​zeros.append([i, j]) sudoku = [[str(i) for i in input().split()] for _ in range(9)] myzeros = [(i, j) for i in range(9) for j in range(9) if sudoku[i][j] == '0'] sdk(myzeros)

 

 

 

+ λ°±μ€€ 질문 μ˜¬λ ΈλŠ”λ° μ „λΆ€ 0으둜 μ±„μ›Œμ§„ 문제 μž…λ ₯ν–ˆμ„λ•Œ 닡이 ν•˜λ‚˜λ§Œ λ‚˜μ˜€κ³  λ©ˆμΆ”λƒκ³  λŒ“κΈ€ 달아주심...

κ·Έλž˜μ„œ ν•΄λ΄€λ”λ‹ˆ λͺ¨λ“  μ‘°ν•© λ‹€ 좜λ ₯λ˜λŠ”λ“― γ…Žγ…‹ ν•˜λ‚˜ ν”„λ¦°νŠΈ 되면 κ°•μ’…ν•˜λŠ” λ°©λ²•μœΌλ‘œ 일단 ν•΄κ²°^^..ν–ˆμ§€λ§Œ μ‹œκ°„μ΄ˆκ³Ό..

λ‚˜μ€‘μ— μ–Έμ  κ°€ ν’€μ–΄λ³Όκ²Œ λ―Έμ•ˆν•˜λ‹€ μŠ€λ„μΏ μ•Ό...

python
λ‹«κΈ°
# 2580.py import sys def check(x, y, num): ​​​​ch_row = sudoku[x] ​​​​ch_col = [sudoku[i][y] for i in range(9)] ​​​​a = (x // 3) * 3 ​​​​b = (y // 3) * 3 ​​​​ch_block = sudoku[a][b:b + 3] + sudoku[a + 1][b:b + 3] + sudoku[a + 2][b:b + 3] ​​​​if num in ch_row: ​​​​​​​​return False ​​​​elif num in ch_col: ​​​​​​​​return False ​​​​elif num in ch_block: ​​​​​​​​return False ​​​​else: ​​​​​​​​return True def sdk(zeros): ​​​​if not zeros: ​​​​​​​​for i in sudoku: ​​​​​​​​​​​​print(' '.join(map(str, i))) ​​​​​​​​sys.exit() ​​​​​​​​return ​​​​for t in range(1, 10): ​​​​​​​​i, j = zeros.pop() ​​​​​​​​if check(i, j, str(t)): ​​​​​​​​​​​​sudoku[i][j] = str(t) ​​​​​​​​​​​​sdk(zeros) ​​​​​​​​​​​​sudoku[i][j] = '0' ​​​​​​​​zeros.append([i, j]) sudoku = [[str(i) for i in input().split()] for _ in range(9)] myzeros = [(i, j) for i in range(9) for j in range(9) if sudoku[i][j] == '0'] sdk(myzeros)