데이터사이언스 기록기📚

[프로그래머스/Python] Level 2_방문길이(Summer/Winter Coding(~2018)) 본문

Coding Test/프로그래머스(Python)

[프로그래머스/Python] Level 2_방문길이(Summer/Winter Coding(~2018))

syunze 2023. 5. 17. 16:58

📌문제 유형

Summer/Winter Coding(~2018) (구현)

 

📌문제

 

프로그래머스

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

programmers.co.kr

 

📌나의 문제풀이

- 구현

  • 위치별로 dx,dy 저장
  • 위치 이동한 nx,ny 값이 -5~5 범위인지 확인 → 옮기기 이전 x,y와 옮긴 후 nx,ny이 move 리스트에 있는지 확인
    (+ nx,ny가 옮기기 이전, x,y가 옮긴 위치인 경우도 확인)
def solution(dirs):
    x,y = 0,0
    move = []
    
    dx = [0,0,1,-1]     # U,D,R,L 순서
    dy = [1,-1,0,0]
    
    for dir in dirs:
        if dir == 'U':
            nx = x + dx[0]
            ny = y + dy[0]
        elif dir == 'D':
            nx = x + dx[1]
            ny = y + dy[1]
        elif dir == 'R':
            nx = x + dx[2]
            ny = y + dy[2]
        else:
            nx = x + dx[3]
            ny = y + dy[3]
            
        if -5 <= nx <= 5 and -5 <= ny <= 5:
            if (x,y,nx,ny) not in move and (nx,ny,x,y) not in move:
                move.append((x,y,nx,ny))
            x,y = nx, ny
    ans = len(move)
    
    return ans

 

📌다른 사람의 문제풀이

- 딕셔너리에 저장해서 값 변경하기 

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

 

📌리뷰

- 변경 내용이 있는 경우, dict 사용하여 표현 후 옮기기

- 좌표도 그래프처럼 (단방향 허용, 양방향 허용) 확인하기

728x90
Comments