
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๊ฐ๋ก ์ค์ด๊ธฐ, ๋จ์ํ์ํค๊ธฐ.
- ์ ํ์์ ์์ ๋ฌธ์ ๋ค์ด ๋ชจ์ฌ ํฐ ๋ฌธ์ ๋ฅผ ์ด๋ฃจ๋ ๊ฒ.
์ธ์๋ ์ด์ฉ๋ฉด ์ด์ ๋ค๋ฅด์ง ์์ ์ ์๊ฒ ์ต๋๋ค. ์ปค๋ค๋ ๋ฌธ์ ๋ค์ด ์ฐ์ ํด ์๋ ๊ฒ์ ์ ๊ธ๋ฟ๋ง ์๋๋ผ ์ฐ๋ฆฌ๋ค ์ธ์๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ฉฐ, ์ด๊ฒ์ด ๋ชจ์ฌ ์ฌํ๋ก ์ด์ด์ง๋๋ค. ๊ทธ๋ ์ง๋ง, ๊ทธ๋ด์๋ก, ์ ๊ฐ ํ ์ ์๋ ๊ทธ ์์ ์กฐ๊ฐ๋ถํฐ ์ฐพ์๋ด์ด ํด๊ฒฐํด๋ด ๋๋ค. ๊ทธ์ ๋ฌธ์ ๊ฐ ํ๋ํ๋ ํ๋ฆด ๋๋ง๋ค ๋๊ปด์ง๋ ์ ํฌ๋ฆฌ์๋ง์ด ์ ๋ฅผ ์์ผ๋ก ๋์๊ฐ๊ฒ ํ ๋ฟ์ ๋๋ค.
'๋์ ์ด์ผ๊ธฐ > ํฌ๋ํํค ์ ๊ธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํฌ๋ํํค ์ ๊ธ 4์ฃผ์ฐจ WIL (0) | 2025.04.12 |
---|---|
ํฌ๋ํํค ์ ๊ธ 3์ฃผ์ฐจ WIL (0) | 2025.04.03 |
ํฌ๋ํํค ์ ๊ธ 2์ฃผ์ฐจ WIL (0) | 2025.03.27 |
ํฌ๋ํํค ์ ๊ธ 8๊ธฐ ์ ์ & 3๋ฐ4์ผ ๋ฏธ๋ํ๋ก์ ํธ & WIL & ์บ ํผ์ค ์ ๊ฒฝ (2) | 2025.03.13 |
์๋ ํ์ธ์.
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!