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

 

프로그래머스

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

programmers.co.kr


내 풀이

def solution(dirs):
    answer=0
    visited = []
    move = {'U': (0, 1), 'D': (0, -1), 'R': (1, 0), 'L': (-1, 0)}
    x,y=0,0
    
    for dir in dirs:
        nx = x + move[dir][0]
        ny = y + move[dir][1]
        print(x,y,nx,ny)
        if -5<=nx<=5 and -5<=ny<=5:
            if not ([[x,y],[nx,ny]] in visited or [[nx,ny],[x,y]] in visited):
                visited.append([[x,y],[nx,ny]])
                
                answer+=1
            x,y=nx,ny
            print(x,y,nx,ny)    
    
    
    
    return answer

사실 처음에는 10 x 10 그래프를 만들어놓고 bfs 문제 풀듯이 다 체크한 뒤에 1의 개수만 세려고했는데 너무 낭비인거같아서 방법을 바꿨다.

방법은 이렇다, u,d,r,l 마다 움직일 방향을 미리 정해놓고 정해놓은 방향으로 갔을때 범위를 넘지않고, 한번도 방문한적 없다면 visit에 넣어준다. 넣어줄때마다 answer에 더해준다.

하나 생각해야할것은, 가령 (1,0) 에서 (0,0)로 좌측으로 한칸 가는거나 (0,0) 에서 (1,0)으로 우측으로 한칸가는거나 같은거다.

그래서 그전 좌표와 갱신할 좌표를 모두 visit에 넣어준다 (x,y,nx,ny) 그리고 x,y 에 갱신 한 좌표를 마지막에 할당해줌으로서 이어나간다.

 

 


다른사람의 풀이

 



 

'취준 > 프로그래머스' 카테고리의 다른 글

파일명 정렬 - 프로그래머스  (0) 2022.10.11
n^2 배열 자르기 - 파이썬  (0) 2022.10.11
야근 지수 - 파이썬  (0) 2022.09.13
행렬의 곱셈 - 파이썬  (0) 2022.09.12
영어 끝말잇기 - 파이썬  (0) 2022.09.12

+ Recent posts