접근
rating 리스트 두 번째부터 검사 시작.
현재 index의 rating < 다음 index의 rating 인지를 검사.
만약 그렇다면, 직전 아이가 받은 사탕 + 1 해서 줌.
현재 index의 rating > 다음 index의 rating 이라면
count++ 하며 계속 비교.
그러다 현재 index의 rating <= 다음 index의 rating이 되어 내리막길이 끝나면
count 수 - 1 부터 시작해서 다음 index부터 사탕을 지급
내려가는 비교 시작하던 index에는 그 이전 index의 사탕 + 1
과 count
중 더 큰 것을 지급
(count = 5, 마지막 현재 index의 rating > 다음 index의 rating
의 현재 index = 3 이라면
index = 4 부터 사탕을 4, 3, 2, 1 순으로 지급.
index = 3 에는 index=2가 받은 사탕 + 1
과 count(5)
중 더 큰 것을 지급.)
현재 index의 rating = 다음 index의 rating 의 경우는
직전 index rating < 현재 index rating이라면 직전 아이 개수+1
개 지급
직전 index rating = 현재 index rating이라면 1개 지급
직전 index rating > 현재 index rating일 순 없음. 이미 지급되었어야 정상.
그리고 다음 index rating < 다다음 index rating이라면 다음 index에도 1개 지급 후 반복 재개
나머지 경우는 반복 재개.
접근은.. 저런 식으로 하면 됨.
근데 이제 코드를 짤 때, index가 넘어가버리거나, 맨 처음 index나 마지막 index를 처리하는 과정,
그리고 현재 index의 rating > 다음 index의 rating 일 때 직전 index rating = 현재 index rating 인지 조사하고 예외처리 해야 하는 것.
1개짜리 배열이 들어올 때.
등등을 예외처리로 빼줬음.
class Solution: def candy(self, ratings: List[int]) -> int: candy = [] leng = len(ratings) endIndex = 0 i = 1 # index 0 candy if leng > 1: if ratings[0] <= ratings[1]: candy.append(1) else: count = 2 endIndex = 1 for j in range(0, leng - 1): if ratings[j] <= ratings[j+1]: endIndex = j break if j == leng - 2: endIndex = j + 1 break count = endIndex + 1 candy.append(count) i = endIndex + 1 for num in range(count-1, 0, -1): candy.append(num) # from 1 to (leng - 2) index while i < leng - 1: if ratings[i] < ratings[i+1]: if ratings[i-1] == ratings[i]: candy.append(1) else: candy.append(candy[-1] + 1) elif ratings[i] > ratings[i+1]: count = 2 endIndex = i + 1 if i != leng - 2: for j in range(i, leng - 1): if ratings[j] <= ratings[j+1]: endIndex = j break if j == leng - 2: endIndex = j + 1 break count = endIndex - i + 1 if ratings[i] == ratings[i-1]: candy.append(count) else: candy.append(max(candy[-1] + 1, count)) for num in range(count-1, 0, -1): candy.append(num) i = endIndex else: # ratings[i] == ratings[i+1] if ratings[i-1] < ratings[i]: candy.append(candy[-1] + 1) else: # ratings[i-1] == ratings[i]: candy.append(1) # else: # ratings[i-1] > ratings[i] # 지급되었어야 정상 if i+2 != leng: if ratings[i+1] < ratings[i+2]: candy.append(1) i += 1 i += 1 # last number of children if len(candy) != leng: if ratings[-2] < ratings[-1]: candy.append(candy[-1] + 1) else: # ratings[-2] == ratings[-1] candy.append(1) else: candy.append(1) return sum(candy)