
WIL: Weekly I Learned; λλ What I Learned This Week
μ κΈμ μ€κ²½
겨μΈμ
λλ€. μκ°μ΄ νλ¬ μ κΈ μΊ νΌμ€μλ 첫λμ΄ λ΄λ Έμ΅λλ€.κ° μλλΌ μΈμμ, 3μμ μ΄λ° ν¨λ°λμ λ³΄κ² λ μ€μ λͺ°λμ΅λλ€. μ΄λ° κ΄κ²½μ 2μ μ€μμ΄μλκ°, λ§μ§λ§μΌλ‘ λ΄€λ κ² κ°μλ°, κ·Έλλ§ ν΄λ μ΄λ° λμ λ€μ λ³΄λ €λ©΄ λ΄λ
κΉμ§ κΈ°λ€λ €μΌκ² μ§, νμ§μ. λ λ³Ό μ€μ΄μΌ! λ무λ λ°κ°μ μ΅λλ€.
μκ³ λ¦¬μ¦ μ λ¬Έ
ν¬λνν€ μ κΈμ μλ‘μ΄ μ£Ό(ι±)μ μμμ νμ λͺ©μμΌμ λλ€. μ΄μ ν¬μ€νΈμμ μ€λͺ ν 0μ£Όμ°¨ λ―Έλ νλ‘μ νΈκ° λλκ³ , μ ν¬λ μλ‘μ΄ νμ λ°°μ λ°κ² λμμ΅λλ€. μ κΈ μ΄μΈμ νλ‘κ·Έλ¨μμ ꡬνκΈ° μ΄λ €μ΄ κ² μ€ νλκ° λ°λ‘ μ»΄ν¨ν μ΄λ‘ μ λν λλ£ νμ΅μΌ κ²μ λλ€. μ΄λ² 1μ£Όμ°¨μμ μ ν¬λ 3μΈ 1νμΌλ‘ 컀리νλΌμ λ°λΌκ°κ³ , λ§€μΌ 1ν μ΄μμ 'μ½μ΄ νμ'μ ν΅ν΄ λλ£λ€λΌλ¦¬ κ°μ νμ΅ν λ΄μ©κ³Ό μμ±ν μ½λμ κ²°κ³Όλ¬Όλ€μ μλ‘ κ³΅μ νκ³ λ¦¬λ·°νμμ΅λλ€. κ°μ¬νκ²λ, μ΄λ²μ μλ‘μ΄ κ΅¬μ±λ νμλ€ μμ νμ΅μ λ무λλ μ κ·Ήμ μΈ μμΈλ‘ μ°Έμ¬ν΄μ£Όμ ¨μ΅λλ€.
μ΄λ² 1μ£Όμ°¨λ μκ³ λ¦¬μ¦μ μ λ¬Ένλ μκ°μ΄μμ΅λλ€. μ κΈμμ μ κ° κ°μ₯ κΈ°λνλ κ² μ€ νλμ λλ€. μ»΄ν¨ν° κ΄λ ¨νμ¬ λ νν λ κ°μΈμ μΌλ‘ κ°μ₯ νλ€μλ κ²μ΄ λ°λ‘ μκ³ λ¦¬μ¦κ³Ό μλ£κ΅¬μ‘°μλλ°, μ κΈμμλ λͺ°μ κ³Ό λλ£ νμ΅μ ν΅ν΄ Pythonμ κΈ°λ³Έ λ¬Έλ²κ³Ό λ°λ³΅λ¬Έμ μ΄μ©ν ꡬνμΌλ‘λΆν° μμνμ¬ μ¬κ·, μ λ ¬, μμ νμκΉμ§ νν€μΉ μ μμμ΅λλ€.
λλ£ νμ΅
ꡬ체μ μΌλ‘ λ°±μ€ 9663λ² N Queen λ¬Έμ λ₯Ό λ€ μ μκ² μ΅λλ€. μ΄μ°μ μ° λ¬Έμ μ νλΉν μ κ·Όλ²μ κΉ¨μ°μ³€μ§λ§, μκ³ λ¦¬μ¦μ Aλ λͺ¨λ₯΄λ μ κ° μ¬κ·μ νμμ±μ λν΄μ μ΄ν΄ν ν±μ΄ μμμ΅λλ€. κ·Έλμ λμ¨ μ²« λ²μ§Έ κ²°κ³Όλ¬Όμ μλμ κ°μμ΅λλ€. (μ°Έκ³ : μ λμκ°λλ€ - λ°±νΈλνΉ μ μ©νλ€κ° μ€ν¨)
def pi_board():
for b in board:
print(b)
input()
init_size = int(input())
board = [[False for _ in range(init_size)] for _ in range(init_size)]
# κ° rowλ§λ€ λ°λ³΅
row = 0
prev_col = []
# μ΄μ column κΈ°μ΅
while True:
# Q λκΈ° - λͺ¨λ row, col, λκ°μ μΌλ‘λ
col=0
while True:
# λμ μ μμΌλ©΄ μλ΅
if board[row][col] == True: continue
# μ΄ rowμ λͺ¨λ colμ΄ Trueλ©΄ ν¬κΈ°, 1 row νν΄, 1 col μλ΅
gave_up = True
for col in board[row]:
if board[row][col] == False: gave_up = False
if gave_up == True:
board[row-1][prev_col.pop()] = True
row = row-1
continue;
# λκΈ° ν΅μ¬ - μΌλ¨ νμ¬ col κΈ°μ΅
prev_col.append(col)
# row μ 체
board[row] = [True]*init_size
# col μ 체
for i in range(init_size):
board[i][col] = True
# λκ°μ μ 체
for i in range(init_size):
pi_board()
# μ°νν₯ λκ°μ
# i μ¦κ°
if not( (row+i) > (init_size-1) or (col+i) > (init_size-1) ):
print(f"i b{row+i} {col+i}")
board[row+i][col+i] = True
# i κ°μ
if not( (row-i) < 0 or (col-i) < 0 ):
board[row-i][col-i] = True
# μ°μν₯ λκ°μ
# μ¦,κ°
if not( (row+i) > (init_size-1) or (col-i) < 0) :
board[row+i][col-i] = True
# κ°,μ¦
if not( (row-i) < 0 or (col+i) > (init_size-1)) :
board[row-i][col+i] = True
input("COL DONE")
col +=1
if col >= init_size: break
row +=1
if row >= init_size: break
print(board)
μ λ° 60μ€μ΄ λμ΄κ°λ 3μ€ λ°λ³΅λ¬Έμ μ§λ€κ° PTSDκ° λμ‘μ΅λλ€. λ°λ‘ μ κ° μ μ μ±μ© μ½λ©ν μ€νΈλ₯Ό 보λ λκ° λ± μ λ¬κΈ° λλ¬Έμ λλ€. λ³΄ν΅ 3λ¬Έμ μ© μΆμ λλλ° 1λ²μ μ¬λ§νλ©΄ λ¨μ ꡬνμ΄λΌ μ λΉν μ§μ‘κ³ , 2λ²μ ν λ μ λ° μμ΄μμ΅λλ€. μ λ κ² 60μ€ 100μ€μ© λμ΄κ°λ (μλ§μ§μ°½μΈ) μ½λ λ§λ λ€κ³ 2μκ°μ© μμλΆλ€κ°, μ΄ μ’κ² λμκ°λ©΄ κ·Έλλ‘ μ μΆνλ κ±°κ³ , λμλ©΄ κ·Έλ₯ ν¬κΈ°νκ³ λ§λ κ²μ λλ€. 3λ² λ¬Έμ λ μμ μλμ‘°μ°¨ λͺ»νλ κ²½μ°κ° λλΆλΆμ΄μμ΅λλ€.
νμ§λ§ μ λ μ΄λ² λλ£ νμ΅μ ν΅ν΄ λ¬Έμ μ λν λ€λ₯Έ μ κ·Ό λ°©μμ ν°λν μ μμμ΅λλ€. λ°λ‘, μ λ° λ¬Έμ μ λν΄μλ λ°λ³΅λ¬Έμ μ§μνκ³ μ¬κ·λ₯Ό ν΅ν΄ λ¬Έμ λ₯Ό νΈλ κ²μ λλ€. νμλ€μ κ°μ λ³ΈμΈλ€μ΄ μμ±ν μ¬κ·λ₯Ό ν΅ν μ κ·Όλ²μ μ€λͺ ν΄μ£Όμ ¨κ³ , κ·Έμ μμΌ μ λ μκ³ λ¦¬μ¦μ λν μλ‘μ΄ κ΄μ μ ν°λν μ μμμ΅λλ€. μ¬κ·. μ¬κ·κ° λ°λ‘ 첫 λ΄μ°λ¦¬μμ΅λλ€. λ¨μν λ¬Έμ μ λ΄μ©μ κΈ°κ³μ²λΌ ꡬννλ € λλ κ²μ΄ μλλΌ, λ¬Έμ λ‘λΆν° ν¨ν΄μ κ°νν΄μΌ μ΄λ₯Ό κΈ°λ°μΌλ‘ μλμ½λ(λλ μ νμ)λ₯Ό λμΆν μ μκ³ , μ΄κ²μ΄ μμ΄μΌλ§ λΉλ‘μ μ λλ‘ λ ν΄κ²°λ²μ μμ±ν μ μμλ κ²μ λλ€. κ°μΈμ μΌλ‘ μ΄κ²μ κΉ¨λ«κΈ°κΉμ§ λμ΄μΌ νλ λ΄μ°λ¦¬κ° λ°λ‘ μ¬κ·μμ΅λλ€. λλ£ νμ΅μ΄ μμλ€λ©΄ μ»μ§ λͺ»νμ μΈμ¬μ΄νΈμΌ κ²μ λλ€.
μ N Queen λ¬Έμ λ μ΄λ»κ² λμμκΉμ.
input_n = int(input().strip())
count = 0 # κ²°κ³Ό
col = [0] * input_n # κ° νμ νΈμ μ΄ λ²νΈμ 리μ€νΈ
# is_safeλ μ§κΈ νΈμ λμ ν보 ν(=row)κ³Ό 컬λΌ(=c)λ₯Ό λ°μ, μ΄μ μ λμ νΈλ€μ νλνλ μννλ©° μμ νμ§ κ²μ¬
def is_safe(row, c):
result = True
for i in range(row): # μ΄μ νλ€μ νΈλ€κ³Ό μΆ©λνλκ°? μΆ©λ μ¦μ False
if col[i] == c or abs(col[i] - c) == row - i: # abs(col[i]-c)==row-i ==> μ΄μ νΈκ³Ό, λμΌλ €λ μ νΈμ, ν μ°¨μ΄ == μ»¬λΌ μ°¨μ΄
return False
return result
def backtrack(row):
global count
if row == input_n: # λ² μ΄μ€ 쑰건 - λͺ¨λ νμ νΈμ λμμΌλ―λ‘
count += 1
return
for c in range(input_n): # c: νμ¬ νμ λμ ν보 μ»¬λΌ λ²νΈ
if is_safe(row, c): # is_safe()κ° λͺ¨λ 컬λΌμμ Falseλ©΄ backtrack()μ΄ νΈμΆλμ§ μμ ==> μμ°μ€λ½κ² λ€μμΌλ‘ λμ΄κ°
col[row] = c
backtrack(row + 1)
backtrack(0) # 0λ²μ§Έ rowλΆν° μμ
print(count)
μ¬κ·λ‘ μ κ·Όνλ, ꡬννλ€κ° λ§ λ°±νΈλνΉκΉμ§ μ λ κ² κ°λ¨νκ² λλ¬μ΅λλ€. 2μ°¨μ 보λλ₯Ό 1μ°¨μμΌλ‘ μ€μΈ κ²μ λ€μ λλ€.
κ° κΈΈμ λ©λ€
ν¬λν° κΉ¨λ¬μμ μ£Όλ ν μ£Όμμ§λ§ μ΄λ κ·Έμ μμμΌ λΏ, μ λ μ¬μ ν λ³μ리μ λλ€. κ²μμΌλ‘ μΉμλ©΄ λ§μΉ νν 리μΌμ λλΈ λ 벨 1μ§λ¦¬ λ΄λΉλ λ€λ¦μμ΅λλ€. μμΌλ‘λ μ΄λΆνμ, λΆν μ 볡, κ·Έλν, DFS(κΉμ΄ μ°μ νμ), BFS(λλΉ μ°μ νμ), μμμ λ ¬(λ°©ν₯ κ·Έλνμμ λ Έλ μ λ ¬νκΈ°), λ€μ΄λλ―Ή νλ‘κ·Έλλ°(κΈ°μ΅μν€λ©° νκΈ°), 그리λ μκ³ λ¦¬μ¦(맀μκ° μ΅μ ν΄λ‘μ¨ ν΄κ²°νκΈ°)κ³Ό κ°μ κ·Έλ₯ μ½κΈ°λ§ ν΄λ 무μ무μν κ²λ€μ΄ μ λ₯Ό λ§μ£Όνκ³ μμ΅λλ€. μ΄μΈμλ μ λ₯Ό κΈ°λ€λ¦¬λ C κΈ°λ° μλ£κ΅¬μ‘° ꡬν, λ λ-λΈλ νΈλ¦¬, λ§λ‘(malloc) λ©, PintOSμ κ°μ κ²λ€ λͺ¨λ, μ κ° μ»΄ν¨ν°κ³ΌνμΌλ‘λΆν° ν λ°μ§ λΉμΌλ μμ λ μ μΉκ΅¬λ€μ΄ νλΆμμ λΉλͺ μ μ§λ₯΄λ©° μννλ κ³Όμ λ€μ λλ€. νΌνκ³ μΆμμ§λ§, κ·Έλμ μ¬νκΉμ§ νΌν΄μμ§λ§, νΌν μ μμμ΅λλ€. μ κ° κΏκΎΈμλ λͺ¨λ μ»€λ¦¬μ΄ ν¨μ€λ μ΄λ₯Ό μꡬνκ³ μμ΅λλ€. μ΄μ λ μ΄μ λ¬Όλ¬λ κ³³μ μμ΅λλ€.
μ΄μ μκ³ λ¦¬μ¦ νΉκ°μ ν΄μ£Όμ , κ²μλ© μ½μΉλκ»μλ μκ³ λ¦¬μ¦ λ¬Έμ νμΌλ‘ μλμ κ°μ΄ λ§μνμ ¨μ΅λλ€.
- λ¬Έμ μ μ¬μ΄μ¦λ₯Ό μ€μ¬λΌ. μ: nκ° => 3κ°λ‘ μ€μ΄κΈ°, λ¨μνμν€κΈ°.
- μ νμμ μμ λ¬Έμ λ€μ΄ λͺ¨μ¬ ν° λ¬Έμ λ₯Ό μ΄λ£¨λ κ².
μΈμλ μ΄μ©λ©΄ μ΄μ λ€λ₯΄μ§ μμ μ μκ² μ΅λλ€. 컀λ€λ λ¬Έμ λ€μ΄ μ°μ ν΄ μλ κ²μ μ κΈλΏλ§ μλλΌ μ°λ¦¬λ€ μΈμλ λ§μ°¬κ°μ§μ΄λ©°, μ΄κ²μ΄ λͺ¨μ¬ μ¬νλ‘ μ΄μ΄μ§λλ€. κ·Έλ μ§λ§, κ·Έλ΄μλ‘, μ κ° ν μ μλ κ·Έ μμ μ‘°κ°λΆν° μ°Ύμλ΄μ΄ ν΄κ²°ν΄λ΄ λλ€. κ·Έμ λ¬Έμ κ° νλνλ ν릴 λλ§λ€ λκ»΄μ§λ μ ν¬λ¦¬μλ§μ΄ μ λ₯Ό μμΌλ‘ λμκ°κ² ν λΏμ λλ€.
'λμ μ΄μΌκΈ° > ν¬λνν€ μ κΈ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
ν¬λνν€ μ κΈ 3μ£Όμ°¨ WIL (0) | 2025.04.03 |
---|---|
ν¬λνν€ μ κΈ 2μ£Όμ°¨ WIL (0) | 2025.03.27 |
ν¬λνν€ μ κΈ μ μ νκΈ° & 3λ°4μΌ λ―Έλνλ‘μ νΈ & WIL & μΊ νΌμ€ μ κ²½ (2) | 2025.03.13 |
μλ νμΈμ.
ν¬μ€ν μ΄ μ’μλ€λ©΄ "μ’μμβ€οΈ" λλ "ꡬλ ππ»" ν΄μ£ΌμΈμ!