Updated:

πŸ–οΈΒ solution

import sys
from collections import deque
from typing import List

def bfs(y: int, x: int):
    time, flag = -1, False
    q = deque([[y, x]])
    while q:
        for _ in range(len(q)):
            vy, vx = q.popleft()
            if vx+1 >= N or vx+K >= N:
                flag = True
                break
            if graph[vy][vx+1] and not visited[vy][vx+1]:  # μ•žμœΌλ‘œ ν•œ μΉΈ 이동
                q.append([vy, vx+1])
                visited[vy][vx+1] = True

            if vx-1 > time+1 and graph[vy][vx-1] and not visited[vy][vx-1]:  # λ’€λ‘œ ν•œ μΉΈ 이동, 갈 수 μ—†λŠ” ꡬ역을 미리 μ˜ˆμƒν•΄μ„œ ν’€μ–΄μ•Ό 함
                q.append([vy, vx-1])
                visited[vy][vx-1] = True

            if graph[(vy+1) % 2][vx+K] and not visited[(vy+1) % 2][vx+K]:  # μ•žμœΌλ‘œ ν•œ μΉΈ 이동
                q.append([(vy+1) % 2, vx+K])
                visited[(vy+1) % 2][vx+K] = True
        time += 1
    return flag

if __name__ == "__main__":
    N, K = map(int, sys.stdin.readline().split())
    graph = [list(map(int, sys.stdin.readline().rstrip())) for _ in range(2)]
    visited = [[False] * N for _ in range(2)]
    print(1) if bfs(0, 0) else print(0)

πŸ’‘Β idea

  • λ§€μ΄ˆλ§ˆλ‹€ λΈ”λŸ­ μ‚¬λΌμ§€λŠ” κΈ°λŠ₯ ν•„μš”
    • 맀초 λ‹¨μœ„λ‘œ νμž…λ ₯을 끊기
    • while & for-loopλŠ” μ΄ˆλ‹¨μœ„λ‘œ νμž…λ ₯ λŠμ–΄λ‚΄λŠ” κ΅¬ν˜„ν•˜κΈ° 맀우 어렀움
    • 일반적인 bfs κ΅¬ν˜„μ²΄ λŒ€μ‹  if-else ꡬ문으둜 큐 ν•˜λ‚˜μ— λŒ€ν•œ λͺ¨λ“  경우의 μˆ˜κ°€ ν•œ λ²ˆμ— 처리 λ˜λ„λ‘ κ΅¬ν˜„
    • λ’€λ‘œ κ°€λŠ₯ κ²½μš°μ— λŒ€ν•΄μ„œλ§Œ μ˜ˆμ™Έμ²˜λ¦¬ - μ‹œκ°„ μ΄ˆλ§ˆλ‹€ λΈ”λŸ­μ„ μ‚­μ œν•˜λŠ” 방법 X, λ’€λ‘œ κ°€λ €λŠ” λΈ”λŸ­μ΄ λ‹€μŒλ²ˆμ— μ‚­μ œ μ˜ˆμ •μΈμ§€ νŒλ‹¨ - μ‚¬λΌμ§ˆ μ˜ˆμ •μ΄λ©΄ 큐에 μ‚½μž…ν•˜μ§€ μ•Šκ³  pass

Leave a comment