Algorithm Problem/Python

[python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - λΉ›μ˜ 경둜 사이클(μ›”κ°„ μ½”λ“œ μ±Œλ¦°μ§€ μ‹œμ¦Œ3)

deo2kim 2022. 2. 6. 21:38
λ°˜μ‘ν˜•

 

πŸ€”λ¬Έμ œ ν•΄κ²°

πŸ’¨ λ¬Έμ œμ—μ„œ μ‹œν‚€λŠ”λŒ€λ‘œ κ·ΈλŒ€λ‘œ ν’€μ—ˆλ‹€. (κ΅¬ν˜„)

 

πŸ’« visited λΌλŠ” 3차원 배열을 λ§Œλ“ λ‹€. 제일 μ•ˆμͺ½μ˜ μ›μ†Œμ—λŠ” 'U','D','R','L' 이 λ“€μ–΄κ°ˆ 수 μžˆλŠ”λ° ν•΄λ‹Ή μœ„μΉ˜(i, j) μ—μ„œ μ΄λ™ν•œ λ°©ν–₯을 λ‹΄κ³  μžˆλ‹€. 싸이클이 λ‹€λ₯΄λ©΄ μ ˆλŒ€λ‘œ μ΄λ™κ²½λ‘œκ°€ ν•˜λ‚˜λΌλ„ λ˜‘κ°™μ€κ²Œ λ‚˜μ˜¬ 수 μ—†κΈ° λ•Œλ¬Έμ—. 이동할 λ•Œ UDRL 이 μžˆλŠ”μ§€ 확인을 ν•˜κ³  μ΄λ™ν•œλ‹€.

 

πŸ’»μ†ŒμŠ€ μ½”λ“œ

def solution(grid):
    answer = []
    N, M = len(grid), len(grid[0])
    visited = [[set() for _ in range(M)] for _ in range(N)]

    # U, D, L, R
    for i in range(N):
        for j in range(M):
            for k in 'UDLR':
                cnt = 0
                while True:
                    if k in visited[i][j]:  # 이미 μ΄λ™ν–ˆλ˜ 적이 μžˆλŠ”μ§€ 확인
                        break
                    visited[i][j].add(k)  # μ—†λ‹€λ©΄ 싸이클 μ‹œμž‘
                    cnt += 1
                    
                    # 이동
                    if k == 'U':
                        i -= 1
                        if i < 0:
                            i = N - 1
                    elif k == 'D':
                        i += 1
                        if i == N:
                            i = 0
                    elif k == 'L':
                        j -= 1
                        if j < 0:
                            j = M - 1
                    elif k == 'R':
                        j += 1
                        if j == M:
                            j = 0
                    
                    # λ‹€μŒ λ°©ν–₯ 체크
                    if grid[i][j] == 'L':
                        if k == 'U':
                            k = 'L'
                        elif k == 'D':
                            k = 'R'
                        elif k == 'L':
                            k = 'D'
                        elif k == 'R':
                            k = 'U'
                    elif grid[i][j] == 'R':
                        if k == 'U':
                            k = 'R'
                        elif k == 'D':
                            k = 'L'
                        elif k == 'L':
                            k = 'U'
                        elif k == 'R':
                            k = 'D'
                    
                if cnt > 0:
                    answer.append(cnt)

    return sorted(answer)

 

πŸ“•λ¬Έμ œ 확인

좜처: ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

링크: λΉ›μ˜ 경둜 싸이클

λ°˜μ‘ν˜•