프로그래머스 Summer/Winter Coding(~2018) : 방문 길이

Minhee kang·2021년 7월 12일
0

문제 보러 가기 👈 클릭!

💡 풀이

✔ 풀이 방법

초기 위치 (0,0), 갔던길인지 가지 않았던 길인지 판별하기 위해 빈 리스트 load 선언
=> 각 명령어를 키로, (x축 이동거리, y축 이동거리)를 값으로 가지는 딕셔너리 선언하여 명령어가 바뀔때 마다 해당하는 값 만큼 위치 이동
=> 이동할 위치의 x,y좌표가 -5보다 작거나 5보다 클 경우에는 pass
=> 이동하면서 지나온 거리가 load에 없을경우 (현재x,현재y,다음x,다음y), (다음x,다음y,현재x,현재y)로 2가지 추가
=> 2가지를 추가하는 이유는 A->B나 B->A나 같은 길이기 때문에!
=> 결론적으로 같은 길을 2번 추가해줬기 때문에 return 할때는 2로 나누어서 return

구현 코드

# 게임 캐릭터가 지나간 길 중 캐릭터가 처음 걸어본 길의 길이 return
def solution(dirs):
    load = []
    x, y = 0, 0 #처음 위치
    
    dir_dict = {'U' : (0, 1), 'D' : (0, -1), 'L' : (-1, 0), 'R' : (1, 0)}
    for dir in dirs:
        dx, dy = dir_dict[dir]
        next_x = x + dx
        next_y = y + dy
        
        if (-5 <= next_x <= 5) and (-5 <= next_y <= 5):
            if (x, y, next_x, next_y) not in load:
                load.append((x, y, next_x, next_y))
                load.append((next_x, next_y, x, y))
            x, y = next_x, next_y
        
    return len(load) // 2

💡추가적인 아이디어

내 방법 에서는 길을 기록하는 load 라는 리스트를 만들어서 갔던 길인지 가지 않았던 길인지 일일이 확인하여 가지 않은 길들만 추가 했지만, 중복으로 추가되지 않는 집합의 특성을 이용하여 load를 집합으로 만들면 일일이 확인하지 않아도 된다.

0개의 댓글

관련 채용 정보