🔎문제

✔️ Summer/Winter Coding(~2018)

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

💡풀이

현재 좌표를 x, y / 다음 좌표를 nx, ny 라고 했을때 (x, y) -> (nx, ny) or (nx, ny) -> (x, y) 를 한 사실이 있는지 체크해

없으면 처음간 길이므로 +1 해주는 문제였다.

이때 좌표계를 벗어나면 무시한다.

 

set을 하나 선언해, 예를들어 (1,2)에서 (3,4)로 갔으면 "1324" 문자열을 set에 저장해

방문을 체크했다.

set에 해당 경로가 없으면 answer++ 한다.

 

📃소스코드

def solution(dirs):    
    dx = {"U": -1, "D": 1, "R": 0, "L": 0}
    dy = {"U": 0, "D": 0, "R": 1, "L": -1}
    
    x, y = 0, 0 # 초기위치
    memo = set()
    answer = 0
    
    for d in dirs:
        nx, ny = x + dx[d], y + dy[d]
        if nx < -5 or nx > 5 or ny < -5 or ny > 5:
            continue
        tmp1 = f'{x}{nx}{y}{ny}' # x,y to nx,ny
        tmp2 = f'{nx}{x}{ny}{y}' # nx,ny to x,y
        if tmp1 not in memo and tmp2 not in memo:
            answer += 1
            memo.add(tmp1)

        x, y = nx, ny
    
    
    return answer