_Han_
나의 개발 노트
_Han_
  • 분류 전체보기 (272)
    • 데이터 엔지니어링 (29)
    • 인프라 (3)
    • 추천시스템 (11)
    • 코딩테스트 (146)
    • 부트캠프 회고 (15)
    • 회고 (4)
    • 자격증 (1)
    • 파이썬 프로그래밍 (6)
    • 통계 (2)
    • Git (21)
    • 유니티2D (33)

최근 글

반응형
hELLO · Designed By 정상우.
_Han_

나의 개발 노트

[코딩테스트] 프로그래머스 방문 길이 파이썬(Python)
코딩테스트

[코딩테스트] 프로그래머스 방문 길이 파이썬(Python)

2022. 12. 31. 00:15
반응형

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

 

프로그래머스

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

programmers.co.kr

def solution(dirs):
    cx = 0
    cy = 0

    moved = set()
    for d in dirs:
        if d == 'U':
            nx = cx
            ny = cy+1
        elif d == 'D':
            nx = cx
            ny = cy-1
        elif d == 'L':
            nx = cx-1
            ny = cy
        elif d =='R':
            nx = cx+1
            ny = cy
        if nx > 5 or nx < -5 or ny > 5 or ny < -5:
            continue
        moved.add((cx, cy, nx, ny))
        moved.add((nx, ny, cx, cy))
        cx = nx
        cy = ny
    return len(moved) // 2

먼저 사용한 변수는 다음과 같이 구성됩니다.

- cx : 현재 x 좌표

- cy : 현재 y 좌표

- nx : 다음 x 좌표

- ny : 다음 y 좌표

- moved : 움직였던 길을 저장하기 위한 집합(set) 자료구조

 

dirs 리스트를 반복하며 조건문을 지나게 됩니다.

조건 'U'와 'D'는 x 좌표를 바꿀 이유가 없기 때문에 현재 x 좌표를 다음 x 좌표가 그대로 따라갑니다.

하지만 y 좌표는 'U'의 경우에 한 칸 위로 올라가야 하기 때문에 +1, 'D'의 경우에는 한 칸 아래로 내려가야 하기 때문에 -1입니다.

조건 'L'과 'R'은 'U', 'D'와 반대로 y 좌표를 바꾸지 않고 x 좌표를 바꾸게 됩니다.

 

위치를 다음 x, y로 바로 이동시키는 것이 아니라 다음 x, y 좌표가 좌표 평면의 경계를 넘어가면 무시해야 하기 때문에

다음 조건문에서 좌표 평면의 경계를 넘어가는 경우는 continue 키워드를 사용하여 무시해줍니다.

 

움직인 길을 저장하기 위하여 (현재 x, 현재 y 다음 x, 다음 y)를 저장합니다.

그리고 캐릭터가 (0, 0)에서 (0,1)로 간 길과 (1, 0)에서 (0,0)으로 간 길은 동일한 길이기 때문에

(다음 x, 다음 y, 현재 x, 현재 y)또한 저장해줍니다.

 

집합 자료구조는 중복 저장을 하지 않기 때문에 중복으로 들어온 값은 자연스럽게 무시가 됩니다.

 

마지막으로 (0, 0) --> (1, 0) 길과 (1,0) --> (0,0)으로 간 길은 동일하기 때문에 2로 나누어 값을 반환합니다.

 

 

 

반응형

'코딩테스트' 카테고리의 다른 글

[코딩테스트] 프로그래머스 더 맵게 파이썬(Python)  (0) 2023.01.03
[코딩테스트] 프로그래머스 스킬트리 파이썬(Python)  (0) 2023.01.01
[코딩테스트] 프로그래머스 점프와 순간 이동 파이썬(Python)  (0) 2022.12.28
[코딩테스트] 프로그래머스 영어 끝말잇기 파이썬(Python)  (0) 2022.12.27
[코딩테스트] 프로그래머스 할인 행사 파이썬(Python)  (0) 2022.12.26
    '코딩테스트' 카테고리의 다른 글
    • [코딩테스트] 프로그래머스 더 맵게 파이썬(Python)
    • [코딩테스트] 프로그래머스 스킬트리 파이썬(Python)
    • [코딩테스트] 프로그래머스 점프와 순간 이동 파이썬(Python)
    • [코딩테스트] 프로그래머스 영어 끝말잇기 파이썬(Python)
    _Han_
    _Han_
    학습한 것을 기록합니다.

    티스토리툴바