728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/49994?language=python3
최종 코드
def solution(dirs):
answer = 0
direction = {'U': 3, 'D': 1, 'R': 2, 'L': 0}
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
visit = [[[0]*11 for _ in range(11)] for _ in range(4)]
x, y = 5, 5
for dir in dirs:
now_d = direction[dir]
nx = x + dx[now_d]
ny = y + dy[now_d]
if nx < 0 or nx > 10 or ny < 0 or ny > 10: continue
if visit[now_d][y][x] or visit[(now_d+2)%4][ny][nx]:
x = nx
y = ny
continue
visit[now_d][y][x] = 1
visit[(now_d+2)%4][ny][nx] = 1
x = nx
y = ny
answer += 1
return answer
풀이 과정
풀이 시간 43분
def solution(dirs):
answer = 0
direction = {'U': 3, 'D': 1, 'R': 2, 'L': 0}
#L, U, R, D
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
#visit[dir][y][x] = (x, y) 좌표의 dir 방향에 방문했다면 1, 아니라면 0
visit = [[[0]*11 for _ in range(11)] for _ in range(4)]
#현재 위치 (x, y)를 시작 위치로 초기화
x, y = 5, 5
for dir in dirs:
#현재 이동할 방향
now_d = direction[dir]
#새롭게 이동할 칸
nx = x + dx[now_d]
ny = y + dy[now_d]
#좌표 평면을 벗어난 경우, 무시한다
if nx < 0 or nx > 10 or ny < 0 or ny > 10: continue
#이전에 방문한 적 없는 경로라면, answer 카운팅 후 방문처리
if not visit[now_d][y][x] and not visit[(now_d+2)%4][ny][nx]:
answer += 1
visit[now_d][y][x] = 1
visit[(now_d+2)%4][ny][nx] = 1
#현재 위치를 갱신한다
x = nx
y = ny
return answer
#시간복잡도 = O(n), 공간복잡도 = O(n)
728x90
반응형
'코테 노트 > 프로그래머스' 카테고리의 다른 글
Level 3 아이템 줍기 Python 3 (0) | 2022.03.15 |
---|---|
Level 3 금과 은 운반하기 Python 3 (0) | 2022.03.14 |
Level 2 n^2 배열 자르기 Python 3 (0) | 2022.03.11 |
Level 2 모음사전 Python 3 (0) | 2022.03.11 |
Level 2 전력망을 둘로 나누기 Python 3 (0) | 2022.03.11 |