본문 바로가기
공부-코딩테스트/코테풀이 - 자바, 파이썬

방문 길이 (코딩테스트, 프로그래머스, 파이썬)

by 령과 2022. 2. 20.

문제

https://programmers.co.kr/learn/courses/30/lessons/49994

 

코딩테스트 연습 - 방문 길이

 

programmers.co.kr

나의 코드

def solution(dirs):
    answer = []
    ways={'U':[0,1],'D':[0,-1],'L':[-1,0],'R':[1,0]}
    x, y = 0, 0
    for i in dirs:
        before_x, before_y = x, y
        after_x, after_y = x+ways[i][0], y+ways[i][1]
        if min(after_x, after_y)>=-5 and max(after_x, after_y)<=5:
            answer.append(tuple(sorted([tuple([before_x, before_y]),tuple([after_x, after_y])])))
            x, y = after_x, after_y
    return len(set(answer))

풀이

방향을 나타내는 ways를 통해서 dirs에서 하나씩 호출해서 방향에 맞는 x, y 좌표에 값을 더해서 전, 후 좌표를 얻는다.

sorted를 사용해서 x, y값에 따른 정렬을 하여 지나간 길을 하나로 합친다

ex) (3,1) -> (2,1) 와 (2,1) -> (3,1)을 일반적으로 list로 순서대로 정렬한다면 다른 길로 인식하지만,

     정렬을 사용해서 단일 화 시킨다.

단 마지막 부분에서 set을 사용해서 중복되는 것을 제거하는 과정을 거칠 때 2차원 배열에 set을 사용할 수 없기 때문에

각 요소들을 tuple로 묶어서 처리한다.

 

알게된 점

2차원 배열은 set을 사용하지 못하기 때문에 요소를 tuple로 감싸서 처리하도록 하자.

댓글