문제
https://school.programmers.co.kr/learn/courses/30/lessons/49994
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
좌표평면 상에서 원점 (0, 0)으로부터 주어진 이동 명령어 UDLR(상하좌우)를 실행했을 때, 지나간 길 중 처음 지나가본 길의 길이를 반환하는 함수 작성
풀이
def solution(dirs):
sets = set()
y, x = 0, 0
udrl = {'U': (1, 0), 'D': (-1, 0), 'R': (0, 1), 'L': (0, -1)}
for d in dirs:
dy, dx = udrl[d]
# 이동해야하는 좌표
ny = y + dy
nx = x + dx
if -5 <= ny <= 5 and -5 <= nx <= 5:
sets.add(((y, x), (ny, nx))) # 현재 위치 -> 이동 후 위치
sets.add(((ny, nx), (y, x))) # 이동 후 위치 -> 현재 위치
y, x = ny, nx # 이동 위치로 현재 위치 변경
return len(sets) // 2
설명
1. 처음 지나가 본 길의 길이가 필요함 -> 중복 제거를 위한 set() 변수 설정
2. 좌표 평면의 초기 위치 y, x = 0, 0 으로 설정
3. dirs 값을 빠르게 찾기 위해 dict 타입으로 변수 udrl 설정 후 각 명령어 마다 이동해야하는 방향의 좌표값 설정
4. for 문 안에서 주어진 명령어 문자열 리스트에서 각 원소를 순회하며 이동방향 dy, dx 정하고 명령어 수행 시 다음 이동 값인 ny, nx 생성
5. 제한사항에 따라 ny, nx 값이 각각 -5 ~ 5 범위 이내일 때에만 sets 변수에 ((기존좌표), (이동좌표)), ((이동좌표), (기존좌표)) 값을 저장하고 y, x를 이동좌표 값으로 업데이트
최종적으로 sets의 길이는 이동하게 된 거리의 2배가 되므로, 2로 나눈 몫을 반환
'Coding Test > Python' 카테고리의 다른 글
| [프로그래머스] 문자열 섞기 (0) | 2023.06.12 |
|---|---|
| [프로그래머스] 귤 고르기 (2) | 2023.06.09 |
| [프로그래머스] 스킬트리 (0) | 2023.06.09 |
| [프로그래머스] 멀리 뛰기 (2) | 2023.06.09 |
| [프로그래머스] N개의 최소공배수 (0) | 2023.06.09 |