티스토리 뷰

안녕하세요

오늘은 프로그래머스 '방문 길이' 문제 풀이입니다.

 

문제 링크입니다!

programmers.co.kr/learn/courses/30/lessons/49994

 

코딩테스트 연습 - 방문 길이

 

programmers.co.kr

● 문제 간단 설명

 5 X 5위의 좌표평면에서 주어진 문자열에 따라 (0, 0)에서 시작하여 점을 움직일 때,

점이 새롭게 이동한 길의 개수를 구하는 문제입니다.

 

● 문제 해결 방향

새롭게 이동한 길이라는 것에서 조금 헷갈렸는데

예를 들어 (0, 0) --> (0, 1)로 이동했다고 할 때,

이후 이동에서 (0, 0) --> (0, 1)이나 (0, 1) --> (0, 0)으로 이동한 경우는 이전에 같은 경로로

이동한 이력이 있기 때문에 새롭게 이동했다고 생각하지 않습니다.

 

 따라서 저는 이동하면서 [이동 전 좌표, 이동 후 좌표]를 구해

마지막에 중복을 제거하여 그 길이를 구하는 방식으로 접근했습니다.

 

● 문제 해결 코드

def solution(dirs):
    x = [0]
    y = [0]
    for j in range(len(dirs)):
        if dirs[j] == 'R':
            if x[-1] < 5:
                x.append(x[-1] + 1)
                y.append(y[-1])
                
        elif dirs[j] == 'L':
            if x[-1] > -5:
                x.append(x[-1] - 1)
                y.append(y[-1])

        elif dirs[j] == 'U':
            if y[-1] < 5:
                x.append(x[-1])
                y.append(y[-1] + 1)
                
        elif dirs[j] == 'D':
            if y[-1] > -5:
                x.append(x[-1])
                y.append(y[-1] - 1)

    p = list(zip(x, y))
    log = []
    for i in range(len(p) - 1):
        if sorted(p[i : i + 2]) not in log:
            log.append(sorted(p[i : i + 2]))
    
    return len(log)

처음에 [0, 0]을 하나의 변수에 저장해 이동한 점들을 리스트에 append 해주니

마지막 결과를 찍어 보았을 때 똑같은 변수를 다 append 해주었다고 처리되어 같은 값들만

리스트에 들어있게 되는 경우가 발생했습니다...

 

그래서 저는 x좌표와 y좌표를 따로 계산하여

이후 이동이 끝나고 zip함수로 둘을 묶고

[이동 전, 이동 후]로 한번 더 묶어 주면서

새롭게 이동한 경로들만 따로 리스트에 저장하여

결과로 이 리스트의 길이를 반환해주었습니다.

 

● 알게 된 것들

  • 리스트 + 튜플로 된 배열도 sort 가능하다.
    • 이 방법을 사용해 마지막에 [(0,0), (1,0)] 와 [(1,0), (0,0)]를
      같은 경우로 생각하여 중복을 제거했습니다.
  • [[0,0]] * 2와 같이 원소의 곱으로 리스트를 선언했을 때
    각 원소는 모두 동일한 주소에 저장된 값이다.
    • 이동한 좌표들을 저장할 때 처음에 위의 방법으로 선언했을 때
      하나의 좌표에 연산을 하면 나머지 좌표도 영향을 받았습니다.

이상 프로그래머스 '방문 길이' 문제 풀이였습니다.

더 좋은 풀이나 설명이 잘못된 부분이 있으면 알려주세요!

감사합니다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함