728x90
반응형
문제: https://school.programmers.co.kr/learn/courses/30/lessons/49994
풀이
중복 경로의 길이를 제외한 움직인 경로의 길이를 반환 ***
1. 중복 경로는 최종 길이에 포함하지 않음 = 중복 포함하지 않을 때 set() 사용 고려
2. 음수 좌표 포함하지 않음 = 2차원 배열에서 음수 인덱스 사용 안함
원점을 (0,0)에서 (5,5)로 바꿔도 됨
def is_valid_move(dx, dy): # 좌표평면을 벗어나는지 체크하는 함수
return 0 <= dx < 11 and 0 <= dy < 11
def solution(dirs):
# U D R L
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
x, y = 5,5
ans = set() # 겹치는 좌표는 1개로 처리하기 위함
for i in dirs:
if i == 'U':
nx = x + dx[0]
ny = y + dy[0]
elif i =='D':
nx = x + dx[1]
ny = y + dy[1]
elif i =='R':
nx = x + dx[2]
ny = y + dy[2]
elif i == 'L':
nx = x + dx[3]
ny = y + dy[3]
if not is_valid_move(nx, ny): # 벗어난 좌표는 인정하지 않음
continue
# A에서 B로 간 경우, B에서 A로 간 경우 (총 경로의 개수는 방향성이 없기 때문 )
ans.add((x, y, nx, ny)) # .add: set에서 요소 추가
ans.add((nx, ny, x, y))
x, y = nx, ny # 좌표를 이동했기 때문에 업데이트
return len(ans)/2
728x90
'자료구조 및 알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] level1. 크레인 인형뽑기 게임 (0) | 2024.06.18 |
---|---|
[프로그래머스] level1. 실패율 (0) | 2024.06.14 |
[프로그래머스] level1. 모의고사 (0) | 2024.06.13 |
프로그래머스 - 식품분류별 가장 비싼 식품의 정보 조회하기 (SQL) (0) | 2024.04.19 |
프로그래머스 - 조건별로 분류하여 주문상태 출력하기 (SQL) (0) | 2024.04.18 |