문제
https://school.programmers.co.kr/learn/courses/30/lessons/49994
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
이동한 길만 체크하는 문제이다.
이렇게 저렇게 삽질좀 해보다가, 두 지점의 좌표를 set에 넣고 검사해보면 되겠다 싶었다.
(1, 0) => (1, 1) 이라면 set에 (1, 0, 1, 1)과 같이 넣는다. 단, (1, 1) => (1, 0) 도 같은 경로를 사용하기에 여기에 대한 검사를 해줘야한다. 따라서 (1, 0) => (1, 1) 을 갈때 (1, 0, 1, 1) 과 (1, 1, 1, 0) 이 set에 없을때만 set에 넣어준다.
그리고 범위안에 들어오면 set에 추가하는 여부와 상관없이 좌표는 갱신해주면 된다.
코드
def solution(dirs):
dic = {'U':(-1, 0), 'D':(1, 0), 'R':(0, 1), 'L':(0, -1)}
x = y = 0
s = set()
for d in dirs:
nx = x + dic[d][0]
ny = y + dic[d][1]
if -5<=nx<=5 and -5<=ny<=5:
if (x, y, nx, ny) not in s and (nx, ny, x, y) not in s:
s.add((x, y, nx, ny))
x = nx
y = ny
return len(s)
후기
나처럼 하지않고 set에 (1, 0, 1, 1), (1, 1, 1, 0) 모두 넣고 set사이즈/2 하는 방법도 있더라.
'프로그래머스' 카테고리의 다른 글
LV2 괄호 변환 (Java) (1) | 2023.10.09 |
---|---|
LV2 스킬트리 (0) | 2023.10.05 |
LV2 2개 이하로 다른 비트 (1) | 2023.09.27 |
LV2 n^2 배열 자르기 (0) | 2023.09.26 |
LV2 점프와 순간 이동 (0) | 2023.09.26 |