방문 길이

박고은·2023년 5월 1일
0

코딩테스트 연습

목록 보기
16/34

def solution(dirs):
    direction = {'U': (0, 1), 'D': (0, -1), 'R': (1, 0), 'L': (-1, 0)}
    x, y = 0, 0
    answer = set()
    
    for d in dirs:
        x2, y2 = x + direction[d][0], y + direction[d][1]
        if x2>=-5 and x2<=5 and y2>=-5 and y2<=5:
            if x==x2: answer.add((x2, min(y, y2), x, max(y, y2)))
            elif y==y2: answer.add((min(x, x2), y, max(x, x2), y2))
            x, y = x2, y2
                
    return len(answer)

앞의 튜플을 뒤집어서 비교하는 방법을 사용하려 했는데
집합으로 묶어 중복이 제거되어도 왔던 길을 다시 가는 경우가 8가지
튜플 내에서의 정렬을 통해 중복 제거
이동할 때 x나 y 둘 중 하나는 변하지 않는다는 점을 이용
x와 x2가 일치하면 y와 y2를 크기순으로 정렬
y와 y2가 일치하면 x와 x2를 크기순으로 정렬

0개의 댓글