내용으로 건너뛰기
테페리넷
사용자 도구
등록
로그인
사이트 도구
검색
도구
문서 보기
Fold/unfold all
역링크
미디어 관리자
사이트맵
등록
로그인
>
미디어 관리자
사이트맵
현재 위치:
테페리넷
»
Problem Solving
»
문제
»
프로그래머스
»
빛의 경로 사이클
ps:problems:programmers:86052
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== 빛의 경로 사이클 ====== ===== 풀이 ===== * 각 노드들에 대해서 다음 노드들이 주어져있을때, 사이클을 모두 찾는 문제이다. 처음 노드를 시작점으로 해서 경로대로 따라가며 사이클을 찾고, 그 다음에는 아직 방문하지 않았던 노드를 골라서 그 노드를 시작점으로 하는 사이클을 찾고, 이것을 모든 노드를 방문할때까지 수행하면 된다. * 기본적인 사이클 찾기 문제들에 비해 조금 신경써야 할것은, 좌표 한개를 상태로 하는 것이 아니라, (좌표, 방향)이 상태가 된다는 것. 그래서 노드의 갯수는 R*C*4 가 된다. * 시간 복잡도는 노드의 갯수인 O(R*C*4) = O(R*C) ===== 코드 ===== <dkpr py> """Solution code for "Programmers 86052. 빛의 경로 사이클". - Problem link: https://programmers.co.kr/learn/courses/30/lessons/86052 - Solution link: http://www.teferi.net/ps/problems/programmers/86052 """ import itertools DELTAS = ((0, 1), (1, 0), (0, -1), (-1, 0)) def solution(grid): answer = [] row_num, col_num = len(grid), len(grid[0]) is_visited = [[[False] * 4 for _ in grid[0]] for _ in grid] for r in range(row_num): for c in range(col_num): cur_r, cur_c = r, c for dir_id in range(4): if is_visited[r][c][dir_id]: continue for i in itertools.count(): if is_visited[cur_r][cur_c][dir_id]: answer.append(i) break is_visited[cur_r][cur_c][dir_id] = True dr, dc = DELTAS[dir_id] cur_r = (cur_r + dr) % row_num cur_c = (cur_c + dc) % col_num if grid[cur_r][cur_c] == 'L': dir_id = (dir_id + 1) % 4 elif grid[cur_r][cur_c] == 'R': dir_id = (dir_id - 1) % 4 return sorted(answer) </dkpr> {{tag>프로그래머스 ps:problems:programmers:Level_2}}
ps/problems/programmers/86052.txt
· 마지막으로 수정됨: 2022/01/12 10:00 저자
teferi
문서 도구
문서 보기
역링크
Fold/unfold all
맨 위로