728x90
λ°˜μ‘ν˜•

λ¬Έμ œπŸ˜‚

NxN 크기의 λ―Έλ‘œμ—μ„œ μΆœλ°œμ§€μ—μ„œ λͺ©μ μ§€μ— λ„μ°©ν•˜λŠ” κ²½λ‘œκ°€ μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. 4

도착할 수 있으면 1, μ•„λ‹ˆλ©΄ 0을 좜λ ₯ν•œλ‹€.

주어진 미둜 λ°–μœΌλ‘œλŠ” λ‚˜κ°ˆ 수 μ—†λ‹€.

 

λ‹€μŒμ€ 5x5 미둜의 μ˜ˆμ΄λ‹€.
 

13101

10101

10101

10101

10021

 

λ§ˆμ§€λ§‰ μ€„μ˜ 2μ—μ„œ μΆœλ°œν•΄μ„œ 0인 ν†΅λ‘œλ₯Ό 따라 μ΄λ™ν•˜λ©΄ 맨 μœ—μ€„μ˜ 3에 도착할 수 μžˆλŠ”μ§€ ν™•μΈν•˜λ©΄ λœλ‹€.

 
 

[μž…λ ₯]
 

첫 쀄에 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ 개수 Tκ°€ 주어진닀.  1<=T<=50
 

λ‹€μŒ 쀄뢀터 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ˜ λ³„λ‘œ 미둜의 크기 Nκ³Ό N개의 쀄에 걸쳐 미둜의 ν†΅λ‘œμ™€ 벽에 λŒ€ν•œ 정보가 주어진닀. 0은 ν†΅λ‘œ, 1은 λ²½, 2λŠ” 좜발, 3은 도착이닀. 5<=N<=100

 

[좜λ ₯]
 

각 μ€„λ§ˆλ‹€ "#T" (TλŠ” ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ 번호)λ₯Ό 좜λ ₯ν•œ λ’€, κ³„μ‚°κ²°κ³Όλ₯Ό μ •μˆ˜λ‘œ 좜λ ₯ν•˜κ±°λ‚˜ λ˜λŠ” ‘error’λ₯Ό 좜λ ₯ν•œλ‹€.

 

λ‚΄ ν’€πŸ¦·

# 4875. 미둜
# μΆœλ°œμ§€μ—μ„œ λͺ©μ μ§€μ— λ„μ°©ν•˜λŠ” κ²½λ‘œκ°€ μ‘΄μž¬ν•˜λŠ”μ§€ 확인

# 사방 탐색
dx = [0, 1, 0, -1] # λ²”μœ„ μ œλŒ€λ‘œ 확인
dy = [-1, 0, 1, 0]
def miro(i, j):
    global result # κ²°κ³Όκ°’ μ „μ—­λ³€μˆ˜λ‘œ μ„€μ •ν•΄μ£ΌκΈ°
    visited[i][j] = True # λ°©λ¬Έν•œ κ³³ true둜 λ°”κΏ”μ£ΌκΈ°
    for k in range(4): # 사방탐색 진행
        di = i + dx[k]
        dj = j + dy[k] # ν•˜λ‚˜ν•˜λ‚˜ μ‹ κ²½μ¨μ„œ 적기
        if 0 <= di < N and 0 <= dj < N and not visited[di][dj]:

            # 0이라 갈수 μžˆλŠ”λ° 아직 방문을 μ•ˆν–ˆλ‹€λ©΄ μƒˆλ‘­κ²Œ κ·Έ 지점을 λ‹€μ‹œ λ°©λ¬Έν•΄μ•Ό ν•˜λ‹ˆκΉŒ μž¬κ·€
            if arr[di][dj] == 0:
                miro(di, dj) # μž¬κ·€λž„^^;;;;;

            # 3 λ„μ°©ν•˜λ©΄ 성곡
            elif arr[di][dj] == 3:
                result = 1 # κ²°κ³Όκ°’ μ„±κ³΅μœΌλ‘œ λ°”κΎΈκΈ°
                break


T = int(input())
for tc in range(1, T + 1):
    N = int(input()) # 미둜의 크기
    arr = [list(map(int, input().strip())) for _ in range(N)]
    # λ°©λ¬Έ 검사
    visited = [[False for _ in range(N)] for _ in range(N)]
    result = 0 # κ²°κ³Όκ°’ (일단 μ‹€νŒ¨)

    for i in range(N-1, -1, -1):
        for j in range(N-1, -1, -1):
            if arr[i][j] == 2:
                miro(i, j) # ν•¨μˆ˜μ— μ‹œμž‘μ  λ„£μ–΄μ£ΌκΈ°

    print(f'#{tc} {result}')

 

λ‚΄κ°€ 잘 λͺ» ν’€μ—ˆλ˜ 점...

 

1. 사방 탐색 λ²”μœ„ 확인!!! : 잘λͺ» μ μ—ˆλ“œλž˜μš”.. κΌ­ ν™•μΈν•˜κ³  적기;;;

2. Runtime error : strip()을 μ‚¬μš©ν•΄ μ£Όμ–΄μ•Ό ν•œλ‹€κ³  κ·ΈλŸ¬λŠ”λ°...

    우리 λˆˆμ—λŠ” μ•ˆ λ³΄μ΄μ§€λ§Œ \n 이 포함 λ˜μ–΄ μžˆμ„μ§€λ„ λͺ¨λ₯Έλ‹€κ³ ν•˜λ„€μš”....

    그리고 input()은 μ•Œμ•„μ„œ 곡백을 μ œκ±°ν•΄μ£Όμ§€λ§Œ

    sysλ₯Ό μ‚¬μš©ν•  λ–„λŠ” 그런 κΈ°λŠ₯이 μ—†μ–΄μ„œsys.stdin.readline().strip() 같이 무쑰건 μ¨μ€˜μ•Ό ν•œλ°μš”!! 😡‍πŸ’«

 

참고함면 쒋을 κ°œλ…λ“€ ✍️

 

1) 탐색

: λ§Žμ€ μ–‘μ˜ 데이터 μ€‘μ—μ„œ μ›ν•˜λŠ” 데이터λ₯Ό μ°ΎλŠ” κ³Όμ •

 ex) DFS, BFS

 

 

2) DFS(깊이 μš°μ„  탐색)

  • μŠ€νƒ μžλ£Œκ΅¬μ‘°μ— κΈ°μ΄ˆν•œλ‹€..
  • μ‹€μž¬λ‘œλŠ” μŠ€νƒλ³΄λ‹€λŠ” μž¬κ·€ ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬ κ°„κ²°ν•˜κ²Œ(?) κ΅¬ν˜„ν•  수 μžˆλ‹€
  • μ‹œκ°„ λ³΅μž‘λ„ : O(N)
# dfs & μž¬κ·€ ν•¨μˆ˜
def dfs(v): # v : μ‹œμž‘μ 
    global visited, graphs  # ν•¨μˆ˜ μ•ˆμ—μ„œ λ§Œλ“€μ–΄μ€€κ²Œ μ•„λ‹ˆλΌ μ•ˆμ •μ„±μ„ μœ„ν•΄ μ „μ—­λ³€μˆ˜λ‘œ μ„€μ •ν•΄μ£Όμ—ˆλ‹€
    visited[v] = True
    
    for i in graphs[v]: # 인접해 μžˆλŠ” κ³³ 쀑에 
        if not visited[i]: # 방문을 μ•ˆν–ˆλ‹€λ©΄
            dfs(i)  # κ·Έ 곳을 탐색!!
        
        else:
            continue # 이미 λ°©λ¬Έν•œ κ³³ 패슀 # 이 λΆ€λΆ„ μ•ˆ μ μ–΄μ€˜λ„ λœλ‹€
            
graph = [] # κ·Έλž˜ν”„λ₯Ό ν‘œν˜„ν•˜λŠ” 인접 리슀트(인접 ν–‰λ ¬ 어렀움 γ…œγ…œ)
visited = [] # 각 λ…Έλ“œκ°€ 방문된 정보λ₯Ό ν‘œν˜„ν•˜λŠ” 1 차원 리슀트(true, flase/ 0,1둜 ꡬ문)

dfs(0)

 

 => κ²½λ‘œκ°€ μžˆλŠ”μ§€ 확인할 λ–„λŠ” dfs λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 더 μ’‹λ‹€κ³  ν•˜λ„€μš”..

728x90
λ°˜μ‘ν˜•

+ Recent posts