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

2022. 8. 15. 21:45알고리즘/프로그래머스

반응형

방문 길이

Summer/Winter Coding(~2018)

문제

 

프로그래머스

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

programmers.co.kr

풀이

지나간 길을 (좌표X, 자표Y, 방향) 으로 체크를 합니다.

예시로 (0,0) 에서 윗길은 (0,0,Up) 로 표현이 가능하며 (0,1,Down) 으로 두가지의 표현이 생깁니다.

이 두가지의 좌표를 매번 이동마다 집합에 추가를 합니다.

중복된 길의 경우 좌표가 집합에 추가되기 때문에 중복되는 길은 고려하지 않습니다.

풀이코드


def solution(dirs):
    answer = 0
    tmp = []
    for i in dirs:
        tmp.append(i)

    navi = set([])
    start = (0,0)
    for dir in tmp:
        x,y = start
        if dir=="U":
            if -5<=x+1<=5 and -5<=y<=5:
                navi.add((x,y,"U"))
                navi.add((x+1,y,"D"))
                start = (x+1,y)
        elif dir=="D":
            if -5<=x-1<=5 and -5<=y<=5:
                navi.add((x,y,"D"))
                navi.add((x-1,y,"U"))
                start = (x-1,y)
        elif dir=="L":
            if -5<=x<=5 and -5<=y-1<=5:
                navi.add((x,y,"L"))
                navi.add((x,y-1,"R"))
                start = (x,y-1)
        else:
            if -5<=x<=5 and -5<=y+1<=5:
                navi.add((x,y,"R"))
                navi.add((x,y+1,"L"))
                start = (x,y+1)

    return len(navi)//2

가장 인기 많은 코드


def 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

반응형