본문 바로가기
알고리즘

[프로그래머스 - python] 방문길이

by 돌맹96 2024. 2. 25.
728x90
반응형

코딩테스트 연습 - 방문 길이 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

문제핵심

A->B와 B->A를 같은경로로 취급하고 나중에 나눠줘라.

 

CODE

# 좌표평면을 벗어나는지 체크하는 함수
def is_valid_move(nx, ny):
    return 0 <= nx < 11 and 0 <= ny < 11

# 다음 좌표 결정
def update_location(x, y, dir):
    if dir == 'U':
        nx, ny = x, y+1
    elif dir == 'D':
        nx, ny = x, y-1
    elif dir == 'L':
        nx, ny = x - 1, y
    elif dir == 'R':
        nx, ny = x + 1, y
    return nx, ny

def solution(dirs):
    x, y = 5, 5
    ans = set() # 겹치는 좌표를 1개로 처리하기 위함
    for dir in dirs: # 주어진 명령어로 움직이면서 좌표 저장
        nx, ny = update_location(x, y, dir)
        if not is_valid_move(nx, ny): # 벗어난 좌표는 인정하지 않음
            continue
        # A에서 B로 간 경우 B에서 A도 추가해야 함(총 경로의 개수는 방향성이 없음)
        ans.add((x, y, nx, ny))
        ans.add((nx, ny, x, y))
        x, y = nx, ny # 좌표를 이동했으므로 업데이트
    return len(ans) / 2
728x90
반응형