문제 확인

 

프로그래머스

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

programmers.co.kr

나의 풀이

  • "출발 - 도착", "도착 - 출발" 모두 목적지와 시작점은 다르지만, 같은 길을 지난다.
  • 이 점을 이용해서, 매번 방문 시 마다 "출발 - 도착", "도착 - 출발" 정보를 저장하는 방식을 통해, 처음 걸어본 길의 길이를 파악했다.
  • 다루기 쉽게 시작점을 (5, 5)라고 생각하고 코드를 작성했다.

왼쪽 상단을 0, 0으로 생각해서 풀었다.

# 이동 처리
def move(d, x, y):
    if d == "U":
        if x - 1 >= 0: x -= 1
    elif d == "D":
        if x + 1 <= 10: x += 1
    elif d == "R":
        if y + 1 <= 10: y += 1
    elif d == "L":
        if y - 1 >= 0: y -= 1
    return x, y

# 이동 체크 필요
def solution(dirs):
    # 방문 여부 확인
    is_visited = set()
    # 시작 위치
    x, y = 5, 5
    for d in dirs:
        # 이동
        nx, ny = move(d, x, y)
        # 이동 안한 경우 처리
        if nx == x and ny == y:
            continue
        # 방문 처리(돌아올 경우 포함)
        is_visited.add(f"{x}{nx}-{y}{ny}")
        is_visited.add(f"{nx}{x}-{ny}{y}")
        # 좌표 변경
        x, y = nx, ny
    return len(is_visited) // 2