DataStructure and Algorithm
Min Rewards 문제풀이
BenzhaminKim
2021. 11. 20. 01:26
scores 배열안에 [8, 4, 2, 1, 3, 6, 7 ,9, 5] 라는 숫자들이 주어진다.
이 숫자들을 각각의 순위대로 나열하는 문제이다.
따라서, [8, 4, 2, 1, 3, 6, 7 ,9, 5] 의 점수 배열이 [4, 3, 2, 1, 2, 3, 4, 5, 1]으로 변화된다.
과정
8은 4 보다 크다.
4는 2 보다 크다.
2는 1 보다 크다.
따라서, 순위를 정하면 8 -> 4, 4-> 3, 2-> 2, 1-> 1으로 변화될 수 있다. [ 4, 3, 2, 1 ....]
3은 1보다 크다.
6은 3보다 크다.
7은 6보다 크다.
9는 7 보다 크다.
따라서, 위와같이 순위를 정하면 [4,3,2,1, 2, 3, 4, 5 ...] 이 된다.
마지막으로 5는 9보다 작으므로 [4,3,2,1, 2, 3, 4, 5, 1] 이 된다.
코드
이 문제는 O(N) time, O(N) sapce 으로 풀 수 있다. 한번의 for loop을 사용함으로써 모든 element를 조회하고 각 element의 상황이 되는 로직을 넣어서 원하는 값을 출력한다.
def minRewards(scores):
# Write your code here.
cache = [ 1 for _ in scores ]
for i in range(1,len(scores)):
prev = scores[i-1]
current = scores[i]
if current > prev:
cache[i] = cache[i-1] + 1
for i in range(len(scores)-1,0,-1):
left = scores[i-1]
right = scores[i]
if left > right and cache[i-1] <= cache[i]:
cache[i-1] = cache[i]+1
return sum(cache)