현재 위치에서 다음 위치로 가는 길은 ((x1, y1), (x2, y2))로 표현할 수 있다.
길을 걷고 난 뒤에는 방금 걸은 길을 방문한 길의 set에 추가해준다.
다음 걸을 길이 만약 방문한 길의 set에 존재한다면 카운트하지 않는다.
다음 걸을 길이 만약 좌표평면 밖이라면 무시하고 다음 동작을 한다.
위의 방법대로 반복하면 쉽게 풀 수 있는 문제다.
FIELD_SIZE = 5
def solution(dirs):
answer = 0
visited = set()
now = (0, 0)
dx = { 'R': 1, 'L': -1, 'U': 0, 'D': 0 }
dy = { 'R': 0, 'L': 0, 'U': 1, 'D': -1 }
for dir in dirs:
_now = now
next = (now[0] + dx[dir], now[1] + dy[dir])
if isOutOfField(next):
continue
now = next
if isVisited(visited, _now, next):
continue
visited.add((_now, next))
answer += 1
return answer
def isVisited(visited, now, next):
return True if (now, next) in visited or (next, now) in visited else False
def isOutOfField(next):
return True if next[0] > FIELD_SIZE or next[0] < -FIELD_SIZE \
or next[1] > FIELD_SIZE or next[1] < -FIELD_SIZE else False
'문제 풀이' 카테고리의 다른 글
[프로그래머스] 가사 검색 / 2020 KAKAO BLIND RECRUITMENT / python (0) | 2020.05.07 |
---|---|
[프로그래머스] 불량 사용자 / 2019 카카오 개발자 겨울 인턴십 / python (0) | 2020.05.05 |
[프로그래머스] 블록 이동하기 / 2020 카카오 블라인드 채용 / python (0) | 2020.05.03 |
[프로그래머스] 외벽 점검 / 2020 카카오 블라인드 채용 / python (0) | 2020.05.03 |
[프로그래머스] 기둥과 보 설치 / 2020 카카오 블라인드 채용 / python (0) | 2020.05.03 |