문제 07 방문 길이
조건1. 이미 지나갔던 길은 Count : X
조건2. 가로10 세로10 좌표평면을 벗어가는 경우 Ignore한다.
즉, 8번째 동작과 9번째 동작은 Count하지 않는다.
아래 그림 역시 7,8번째는 밖으로 벗어나는 경우므로 그냥 무시하고
9번째 동작 수행
이 책의 핵심 풀이 과정
1. Set 활용
2. 기능 분리
- is_valid_move
- update_location
3. 양 방향으로 set에 add해주고 나중에 1/2하기
def solution(dirs):
x, y = 5,5 #첫 시작점을 (5,5)라고 가정하고 문제 풀이
ans = set() #겹치는 좌표는 1개로 처리하기위해 Set을 활용
for dir in dirs: #dirs = "ULURRDLLU"
nx,ny = update_location(x,y,dir)
if not is_valid_move(nx,ny):
continue
ans.add((x,y,nx,ny)) #실제 방향
ans.add((nx,ny,x,y)) #반대 방향도 넣어주기위해
x,y = nx,ny #출발지 변경
return len(ans) / 2 #반대방향도 넣어줬기 때문에 2로 나눈다
def is_valid_move(nx,ny) :
return 0 <= nx < 11 and 0 <= ny <11
def update_location(x,y,dir) :
if dir =='U':
nx, ny = x, y+1
elif dir =='D':
nx, ny = x, y-1
elif dir =='L':
nx, ny = x-1, y
elif dir =='R':
nx, ny = x+1, y
return nx,ny
지금까지 "코딩 테스트 합격자 되기 - 파이썬" 편 책에서 다룬 문제 중에서
제일 어려웠다 ...ㅜㅜ
https://school.programmers.co.kr/learn/courses/30/lessons/49994
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr