프로그래머스 Lv2 방문 길이 (python)

김범기·2024년 2월 18일

프로그래머스

목록 보기
72/77

방문 길이




풀이

문제를 보고 중복으로 지나온 길은 하나로 치고, 지나온 길이의 전체길이를 구하는 것이니, set()을 이용해먹자고 생각하고 아래처럼 풀이를 진행했다.

움직임을 나타내기 위해 dx와 dy를 이용해 표현해 주었으며, 이를 이용해 커맨드에 따라 좌표가 움직이게 해주었다.

일단 좌표는 행렬로 만들필요가 없는 것이기에 -5 ~ 5 사이에서만 작동할 수 있게 조건을 걸어주었다. 그와 같이 그 사이에서 움직일 수 있는 좌표라면, 내가 간 길이를 set()으로 설정한 변수인 load에다가 ((출발),(도착)) 과 ((도착),(출발))을 추가했다. 이렇게 함으로서 길이를 나타내는 대에는 중복이 제거되므로 다시 더 손을 쓸 필요는 없기 때문이다.

커맨드가 끝나고 나면 이 set() 인 load 의 길이를 반으로 나눈 값을 반환하였다.

# 게임 캐릭터를 4가지 명령어로 움직임
# UDRL상하우좌
# 0,0에서 시작 경게는 좌상우하 대칭

# 처음 걸어본 길의 길이를 구하시오.
# [출발지점-도착지점], [도착지점-출발지점] 을 기록해두고 출력시에는 /2 하면 될듯?
direction = {'U':0,'D':1,'R':2,'L':3}
def solution(dirs):
    answer = 0
    load = set([])
    # 현재 위치(0,0)
    current = [0,0]
    #상하우좌
    dy = [1,-1,0,0]
    dx = [0,0,1,-1]
    # 움직이기
    for i in range(len(dirs)):
        if -5<= current[0] + dx[direction[dirs[i]]] <= 5 and -5 <= current[1] + dy[direction[dirs[i]]] <= 5:
            nx = current[0] + dx[direction[dirs[i]]]
            ny = current[1] + dy[direction[dirs[i]]]
            load.add(((current[0], current[1]),(nx, ny)))
            load.add(((nx,ny),(current[0], current[1])))
            current = [nx, ny]
        
    return len(load) //2

다른 사람 풀이

음... 내가 푼 방식과 유사하다.
합격!

ef solution(dirs):
    s = set()
    d = {'U': (0,1), 'D': (0, -1), 'R': (1, 0), 'L': (-1, 0)}
    x, y = 0, 0
    for i in dirs:
        nx, ny = x + d[i][0], y + d[i][1]
        if -5 <= nx <= 5 and -5 <= ny <= 5:
            s.add((x,y,nx,ny))
            s.add((nx,ny,x,y))
            x, y = nx, ny
    return len(s)//2
profile
반드시 결승점을 통과하는 개발자

0개의 댓글