공부/알고리즘
[hackerrank] Candies python
richpark
2021. 9. 10. 14:24
1. candyList를 n사람 만큼 1로 초기화
2. for문을 한번 돌려서 arr[i] < arr[i+1] 일때, candyList[i+1] = candyList[i] + 1
3. 2번째 for문이 키포인트인데, 첫번째 for문에서 우측으로 arr가 높을때만 candy의 숫자를 늘려 주었는데, 1 2 3 4 3 2 1와 같은 케이스에서 좌측으로 갈때 arr이 커질때 처리를 해주어야 한다. 여기서, arr[i] < arr[i-1]의 판별은 당연히 생각나지만 candyList[i-1] <= candyList[i] 즉, 중복으로 candyList의 값을 증가를 방지한다.
# 5 4 3 -> 1 1 1
# 3 5 5 2 4 -> 1 2 1 1 2
# 1 2 3 4 3 2 1 -> 1 2 3 4 1 1 1 -> 1 2 3 4 3 2 1
def candies(n, arr):
# Write your code here
candyList = [1] * n
for i in range(n-1):
if arr[i] < arr[i+1]:
candyList[i+1] = candyList[i] + 1
for i in range(n-1,0,-1):
if arr[i] < arr[i-1] and candyList[i-1] <= candyList[i]:
candyList[i-1] = candyList[i] + 1
return sum(candyList)
728x90