문제
https://programmers.co.kr/learn/courses/30/lessons/49994
나의 코드
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로 감싸서 처리하도록 하자.
'공부-코딩테스트 > 코테풀이 - 자바, 파이썬' 카테고리의 다른 글
큰 수 만들기 (코딩테스트, 프로그래머스, 파이썬) (0) | 2022.02.24 |
---|---|
카펫 (코딩테스트, 프로그래머스, 파이썬) (0) | 2022.02.21 |
H-Index (코딩테스트, 프로그래머스,파이썬) (0) | 2022.02.18 |
전화번호 목록 (코딩테스트, 프로그래머스) (0) | 2022.02.17 |
위장 (코딩테스트, 프로그래머스) (2) | 2022.02.08 |
댓글