[PG] 조이스틱
[참고]
solution
- 각 알파벳마다 상하 조정 중 min값으로 최소 횟수를 담아두는 배열을 만든다.
- 0번 idx부터 시작해서 좌우 이동 횟수를 answer에 더해준다.
- 좌우 방향 전환 시에는 바꿔야 하는 알파벳이 나오기까지의 좌우 거리를 구한뒤, 그 중 최솟값이 되는 방향으로 전환한다.
- 모든 알파벳이 조정된 경우(change 배열이 전부 0인경우) 결과값을 반환한다.
def solution(name):
change = [min(ord(i) - ord("A"), ord("Z") - ord(i)+1) for i in name]
idx, answer = 0, 0
while True:
answer += change[idx]
change[idx] = 0
if sum(change) == 0:
break
left, right = 1, 1
while change[idx - left] == 0:
left += 1
while change[idx + right] == 0:
right += 1
answer += left if left < right else right
idx += -left if left < right else right
return answer
크게 두 가지 방향에서 최솟값 고려
1. 상하 중 min
2. 좌우
A가 나올 때까지 next를 센다.
3. 마지막이 A로 끝날 경우
def solution(name):
answer = 0
min_move = len(name) - 1
next = 0
while name[min_move] == 'A' and min_move > 0:
min_move -= 1
if (min_move < 0):
return answer
for i, char in enumerate(name):
answer += min(ord(char) - ord('A'), ord('Z') - ord(char) + 1)
next = i + 1
while next < len(name) and name[next] == 'A':
next += 1
min_move = min(min_move, i + (i + len(name)) - next)
answer += min_move
return answer
Author And Source
이 문제에 관하여([PG] 조이스틱), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kinnyeri/PG-조이스틱저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)