티스토리 뷰
안녕하세요
오늘은 프로그래머스 '방문 길이' 문제 풀이입니다.
문제 링크입니다!
programmers.co.kr/learn/courses/30/lessons/49994
● 문제 간단 설명
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), (1,0)] 와 [(1,0), (0,0)]를
- [[0,0]] * 2와 같이 원소의 곱으로 리스트를 선언했을 때
각 원소는 모두 동일한 주소에 저장된 값이다.- 이동한 좌표들을 저장할 때 처음에 위의 방법으로 선언했을 때
하나의 좌표에 연산을 하면 나머지 좌표도 영향을 받았습니다.
- 이동한 좌표들을 저장할 때 처음에 위의 방법으로 선언했을 때
이상 프로그래머스 '방문 길이' 문제 풀이였습니다.
더 좋은 풀이나 설명이 잘못된 부분이 있으면 알려주세요!
감사합니다.
'PYTHON' 카테고리의 다른 글
[프로그래머스/PYTHON] 상호 평가 (0) | 2021.09.02 |
---|---|
[프로그래머스/PYTHON] 직업군 추천하기 (0) | 2021.09.02 |
[프로그래머스/PYTHON] 다음 큰 숫자 (0) | 2021.03.02 |
[프로그래머스/PYTHON] 최솟값 만들기 (0) | 2021.03.02 |
[프로그래머스/PYTHON] 문자열 압축 (0) | 2021.03.02 |
- Total
- Today
- Yesterday
- 백준
- 상호평가
- Vuex
- Vue
- React
- python
- Repository Pattern
- redux
- 알고리즘
- webpack
- AxiosInterceptor
- TypeScript
- programmers
- 문제풀이
- SOAP API
- Preloading
- 파이썬
- clean code
- v-for
- redux-thunk
- 프로그래머스
- SPA
- js
- GraphQL
- React.memo
- Transpiler
- reactrouter
- bundler
- Vue.js
- error
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |