[프로그래머스] 조이스틱 [탐욕법(Greedy)] [python] Level2
설계 및 구현
접근 방법
문제에 주어진 조건대로 좌우,상하이동에 따라 조작횟수를 더해 간 값을 반환하여 해결 할 수 있다.
mt_solution
def solution(name):
# 1
answer = 0
name = list(name)
index = 0
while True:
# ①
right = 1
left = 1
# ②
if name[index] != 'A':
answer += min(ord(name[index]) - ord('A'), ord('Z') - ord(name[index]) + 1)
# ③
name[index] = 'A'
# ④
if name == ['A']*len(name):
break
# ⑤
for i in range(1,len(name)):
if name[index+i] == 'A':
right+=i
else:
break
for i in range(1,len(name)):
if name[index-i] == 'A':
left+=i
else:
break
# ⑥
if right>left:
answer +=left
index -= left
else:
answer +=right
index += right
# 2
return answer
1. 조작 횟수를 쌓을 answer, index변수를 선언 초기화 name를 list화 해준다.
while
① 좌우거리를 비교하기 위한 변수 right, left를 선언 하고 1로 초기화 한다.
② name[index] 값이 'A'가 아니라면 상하중 가까운 거리를 answer에 쌓는다
③ name[index] ='A'로 저장한다.
④ name이 'A'로만 이루어져 있다면 모든 조작횟수를 쌓은 것이니 break
⑤ 우로 'A'를 찾고 찾았다면 right를 i 만큼 더한다. 못 찾으면 for문 종료
좌로 'A'를 찾고 찾았다면 left를 i만큼 더한다 못 찾으면 for문 종료
⑥만약 right>left 좌로 거리가 더 짧다면 answer에 거리만큼 쌓고 index 를 그거리만큼 감소시킨다
아니라면 answer에 거리만큼 쌓고 index를 그 거리만큼 증가 시킨다.
2. 모든 조작횟수를 계산했다면 answer을 반환하여 해결 해준다.
반응형
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 전화번호 목록 [해시] [python] (0) | 2020.09.23 |
---|---|
[프로그래머스] 더 맵게 [힙(heap)] [python] (0) | 2020.09.23 |
[프로그래머스] 가장 큰 수 [정렬] [python] (0) | 2020.09.23 |
[프로그래머스] 소수 찾기 [완전탐색] [python] (0) | 2020.09.23 |
[프로그래머스] 큰 수 만들기 [탐욕법(Greedy)] [python] (0) | 2020.09.23 |