https://programmers.co.kr/learn/courses/30/lessons/49994
set을 활용해서 풀면 된다.
주의해야 할 점은 (0, 0) -> (1, 0)으로 가는 길과 (1, 0) -> (0, 0)으로 가는 길은 동일한 길이다.
나의 풀이
from collections import defaultdict
def solution(dirs):
answer = 0
load = defaultdict(set)
x, y = 0,0
for dir in dirs:
if dir =='U':
if y+1 <6:
load[(x,y)].update([(x,y+1)])
load[(x,y+1)].update([(x,y)])
x,y = x,y+1
elif dir =='D':
if y-1 >-6:
load[(x,y)].update([(x,y-1)])
load[(x,y-1)].update([(x,y)])
x,y = x,y-1
elif dir =='L':
if x-1 >-6:
load[(x,y)].update([(x-1,y)])
load[(x-1,y)].update([(x,y)])
x,y = x-1, y
elif dir =='R':
if x+1 <6:
load[(x,y)].update([(x+1,y)])
load[(x+1,y)].update([(x,y)])
x,y = x+1,y
for v in load.values():
answer += len(v)
return answer//2
다른 사람 풀이
def solution(dirs):
s = set()
d = {'U': (0,1), 'D': (0, -1), 'R': (1, 0), 'L': (-1, 0)}
x, y = 0, 0
for i in dirs:
nx, ny = x + d[i][0], y + d[i][1]
if -5 <= nx <= 5 and -5 <= ny <= 5:
s.add((x,y,nx,ny))
s.add((nx,ny,x,y))
x, y = nx, ny
return len(s)//2
로직은 동일한데 똑같은 작업에 대해 깔끔하게 정리해서 가져왔다.
문제를 풀면서 더 깔끔하게 정리할 수 있을 것 같다고 생각했는데 이렇게 dict를 활용해서 풀면 좋겠다는 생각이 들었다.
'Programming > Programmers' 카테고리의 다른 글
[프로그래머스] 가장 큰 정사각형 찾기 (Python) (0) | 2021.11.06 |
---|---|
[프로그래머스] 방금 그곡 (Python) (0) | 2021.11.04 |
[프로그래머스] 쿼드 압축 후 개수 세기 (Python) (0) | 2021.11.04 |
[프로그래머스] n^2 배열 자르기 (Python) (0) | 2021.11.04 |
[프로그래머스] 점프와 순간 이동(Python) (0) | 2021.11.03 |
댓글