본문 바로가기

알고리즘

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

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

 

프로그래머스

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

programmers.co.kr

 

 

문제는 간단하다

좌표평면 위에 걸어간 길이는 구하는데, 중복되지 않은 길을 구하는 것이다.

예를 들어 5,5 -> 5,6 -> 5,5로 갔더라면 걸어간 총 길이는 2(처음 시작은 5,5)이지만 중복되지 않은 길은 1이다.

    

def solution(dirs):
    answer = 0
    visit = []
    
    location =[5,5]
    graph = [[0 for j in range(11) ]for _ in range(11)]
    
    
    for i in range(len(dirs)):
        
        if dirs[i] == 'U':
            if location[0] - 1 >= 0:
                a = [ [location[0], location[1]], [location[0] - 1, location[1]]]
                b = sorted(a, key=lambda x : x[0])
                if b not in visit:
                    answer += 1
                visit.append(b)
                location = [location[0] - 1, location[1]]
                
        elif dirs[i] == 'L':
            if location[1] - 1 >= 0:
                a = [[location[0], location[1]], [location[0], location[1] - 1]]
                b = sorted(a, key=lambda x : x[1])
                if b not in visit:
                    answer += 1
                visit.append(b)
                location = [location[0], location[1] - 1]
                
        elif dirs[i] == 'D':
            if location[0] + 1 < 11:
                a = [[location[0], location[1]], [location[0] + 1, location[1]]]
                b = sorted(a, key=lambda x : x[0])
                if b not in visit:
                    answer += 1
                visit.append(b)
                location = [location[0] + 1, location[1]]
        
        elif dirs[i] == 'R':
            if location[1] + 1 < 11:
                a = [[location[0], location[1]], [location[0], location[1] + 1]]
                b = sorted(a, key=lambda x : x[1])
                if b not in visit:
                    answer += 1
                visit.append(b)
                location = [location[0], location[1] + 1]
        
    return answer