π¦₯ μ½ν
/BAEKJOON
[BAEKJOON python] 15684_μ¬λ€λ¦¬ μ‘°μ
μ§μ§μνμΉ΄
2022. 10. 13. 16:50
728x90
λ°μν
μ¬λ€λ¦¬ κ²μμ Nκ°μ μΈλ‘μ κ³Ό Mκ°μ κ°λ‘μ μΌλ‘ μ΄λ£¨μ΄μ Έ μλ€.
μΈμ ν μΈλ‘μ μ¬μ΄μλ κ°λ‘μ μ λμ μ μλλ°,
κ°κ°μ μΈλ‘μ λ§λ€ κ°λ‘μ μ λμ μ μλ μμΉμ κ°μλ Hμ΄κ³ , λͺ¨λ μΈλ‘μ μ΄ κ°μ μμΉλ₯Ό κ°λλ€
μ΄λ‘μ μ μΈλ‘μ μ λνλ΄κ³ , μ΄λ‘μ κ³Ό μ μ μ΄ κ΅μ°¨νλ μ μ κ°λ‘μ μ λμ μ μλ μ
κ°λ‘μ μ μΈμ ν λ μΈλ‘μ μ μ°κ²°ν΄μΌ νλ€.
λ¨, λ κ°λ‘μ μ΄ μ°μνκ±°λ μλ‘ μ νλ©΄ μ λλ€. λ, κ°λ‘μ μ μ μ μμ μμ΄μΌ νλ€.
κ°λ‘μ μ μμ κ·Έλ¦Όκ³Ό κ°μ΄ μΈμ ν λ μΈλ‘μ μ μ°κ²°ν΄μΌ νκ³ , κ°λ‘μ μ λμ μ μλ μμΉλ₯Ό μ°κ²°ν΄μΌ νλ€.
μ¬λ€λ¦¬ κ²μμ κ°κ°μ μΈλ‘μ λ§λ€ κ²μμ μ§ννκ³ , μΈλ‘μ μ κ°μ₯ μμμλΆν° μλ λ°©ν₯μΌλ‘ λ΄λ €κ°μΌ νλ€.
μ΄λ, κ°λ‘μ μ λ§λλ©΄ κ°λ‘μ μ μ΄μ©ν΄ μ μΈλ‘μ μΌλ‘ μ΄λν λ€μ, μ΄λν μΈλ‘μ μμ μλ λ°©ν₯μΌλ‘ μ΄λν΄μΌ νλ€.
μ¬λ€λ¦¬μ κ°λ‘μ μ μΆκ°ν΄μ, μ¬λ€λ¦¬ κ²μμ κ²°κ³Όλ₯Ό μ‘°μνλ €κ³ νλ€.
μ΄λ, iλ² μΈλ‘μ μ κ²°κ³Όκ° iλ²μ΄ λμμΌ νλ€.
μΆκ°ν΄μΌ νλ κ°λ‘μ κ°μμ μ΅μκ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±
첫째 μ€μ μΈλ‘μ μ κ°μ N, κ°λ‘μ μ κ°μ M, μΈλ‘μ λ§λ€ κ°λ‘μ μ λμ μ μλ μμΉμ κ°μ Hκ° μ£Όμ΄μ§λ€. (2 ≤ N ≤ 10, 1 ≤ H ≤ 30, 0 ≤ M ≤ (N-1)×H)
λμ§Έ μ€λΆν° Mκ°μ μ€μλ κ°λ‘μ μ μ λ³΄κ° ν μ€μ νλμ© μ£Όμ΄μ§λ€.
κ°λ‘μ μ μ 보λ λ μ μ aκ³Ό bλ‘ λνλΈλ€. (1 ≤ a ≤ H, 1 ≤ b ≤ N-1)
bλ² μΈλ‘μ κ³Ό b+1λ² μΈλ‘μ μ aλ² μ μ μμΉμμ μ°κ²°νλ€λ μλ―Έ
κ°μ₯ μμ μλ μ μ μ λ²νΈλ 1λ²μ΄κ³ , μλλ‘ λ΄λ €κ° λλ§λ€ 1μ΄ μ¦κ°
μΈλ‘μ μ κ°μ₯ μΌμͺ½μ μλ κ²μ λ²νΈκ° 1λ²μ΄κ³ , μ€λ₯Έμͺ½μΌλ‘ κ° λλ§λ€ 1μ΄ μ¦κ°νλ€.
μ λ ₯μΌλ‘ μ£Όμ΄μ§λ κ°λ‘μ μ΄ μλ‘ μ°μνλ κ²½μ°λ μλ€
iλ² μΈλ‘μ μ κ²°κ³Όκ° iλ²μ΄ λμ€λλ‘ μ¬λ€λ¦¬ κ²μμ μ‘°μνλ €λ©΄, μΆκ°ν΄μΌ νλ κ°λ‘μ κ°μμ μ΅μκ°μ μΆλ ₯
λ§μ½, μ λ΅μ΄ 3λ³΄λ€ ν° κ°μ΄λ©΄ -1μ μΆλ ₯νλ€. λ, λΆκ°λ₯ν κ²½μ°μλ -1μ μΆλ ₯
def check() :
for i in range(N) : # μΈλ‘μ κ²μ¬
k = i # μ΄λνλ κ°λ‘μ
for j in range(H) :
if visited[j][k] : # κ°λ‘μ μ‘΄μ¬ -> μ€λ₯Έμͺ½
k += 1
elif k > 0 and visited[j][k-1] : # κ°λ‘μ μΌμͺ½μ μ‘΄μ¬ -> μΌμͺ½μΌλ‘
k -= 1
if k != i :
return False
return True
def dfs(cnt, x, y ) :
global answer
if check() :
answer = min(answer, cnt)
return
elif cnt == 3 or answer <= cnt :
return
for i in range(x, H) :
# ν νμ
if i == x :
k = y
else :
k = 0
for j in range(k, N - 1):
# μ΄ νμ
if not visited[i][j] and not visited[i][j+1] :
if j > 0 and visited[i][j - 1] :
continue
visited[i][j] = True
dfs(cnt+1, i, j +2)
visited[i][j] = False
# μΈλ‘μ κ°μ, κ°λ‘μ κ°μ, μΈλ‘μ λ§λ€ κ°λ‘μ λμ μ μλ μμΉκ°μ
N, M, H = map(int, input().split())
visited = [[False] * N for _ in range(H)] # λ°©λ¬Έ νμΈ
if M == 0 : # κ°λ‘μ μμ
print(0) # μ΅μκ° 0
exit(0)
for _ in range(M) :
a, b = map(int, input().split()) # κ°λ‘μ μ 보
visited[a-1][b-1] = True
answer = 4
dfs(0, 0, 0)
if answer < 4 :
print(answer)
else :
print(-1)
728x90
λ°μν