https://school.programmers.co.kr/learn/courses/30/lessons/49994
1. 내가 작성한 풀이
테스트케이스 8번부터 쭉 틀려서 뭐지 하고 질문 목록을 보고
왼->오, 오->왼 등을 같은 경로로 처리하지 않았다는 사실을 알았다.
이걸 수정한 풀이는
1. 현재 위치 + 이동 거리가 좌표 범위를 넘어가면 continue
2. 범위를 넘어가지 않고, 딕셔너리에 (현재x,현재y,이동x,이동y) 혹은 (이동x,이동y,현재x,현재y) 둘 다 있지 않은 경우
키 값을 새롭게 넣어준다.
3. 키 값의 길이를 출력하는 방법으로 문제를 해결했다.
def solution(dirs):
now = [0,0] #현재 좌표
dic = {}
moves = [["U",1,0],["D",-1,0],["R",0,1],["L",0,-1]] #이동 정보
for i in dirs:
for j in range(4):
if i == moves[j][0]: #자신의 이동 방향에 맞는 이동 방향 가져오기
nx = now[0] + moves[j][1]
ny = now[1] + moves[j][2]
#범위 넘어가면 continue
if nx < -5 or nx > 5 or ny < -5 or ny > 5 : continue
#양방향 모두 다녀온 적이 없는 경우 키값으로 저장
if (now[0],now[1],nx,ny) not in dic and (nx,ny,now[0],now[1]) not in dic :
dic[now[0],now[1],nx,ny] = 0
#현재 위치 변경
now = nx,ny
return len(dic.keys())
2. 수정한 풀이
1. moves를 딕셔너리로 바꿔서 키값으로 바로 찾을 수 있도록 했다.
2. 경로의 기록을 set으로 해서 add로 원소를 더했다.
def solution(dirs):
x,y = 0,0
record = set()
moves = {"U":(1,0),"D":(-1,0),"R":(0,1),"L":(0,-1)}
for i in dirs:
nx = x + moves[i][0]
ny = y + moves[i][1]
if nx >= -5 and nx <= 5 and ny >= -5 and ny <= 5 :
record.add((x,y,nx,ny))
record.add((nx,ny,x,y))
x,y = nx,ny
return len(record)//2
'🔅코딩테스트 공부🔅 > ❗프로그래머스(Lv.2)' 카테고리의 다른 글
[프로그래머스] Level2 튜플(python) (0) | 2023.04.26 |
---|---|
[프로그래머스] Level2 문자열 압축(python) (0) | 2023.04.25 |
[프로그래머스] Level2 타겟 넘버(python) (0) | 2023.04.21 |
[프로그래머스] Level2 후보키(python) (0) | 2023.04.20 |
[프로그래머스] Level2 오픈채팅방(python) (0) | 2023.04.19 |
댓글