해당 문제는 다음과 같은 절차로 2번 전체 순회하여 풀이가 가능하다.
function candy(ratings: number[]): number {
// 모든 아이들에게 최소 1개의 사탕을 할당하는 배열 생성
const candies: number[] = new Array(ratings.length).fill(1);
// 왼쪽에서 오른쪽으로 순회하면서
// 현재 아이의 rating이 왼쪽 아이보다 높은 경우 처리
for (let i = 1; i < ratings.length; i++) {
if (ratings[i] > ratings[i-1]) {
candies[i] = candies[i-1] + 1;
}
}
// 오른쪽에서 왼쪽으로 순회하면서
// 현재 아이의 rating이 오른쪽 아이보다 높은 경우 처리
// 이때 이미 할당된 사탕 개수와 비교하여 더 큰 값을 선택
for (let i = ratings.length - 2; i >= 0; i--) {
if (ratings[i] > ratings[i+1]) {
candies[i] = Math.max(candies[i], candies[i+1] + 1);
}
}
// 모든 사탕의 개수를 합산
return candies.reduce((sum, count) => sum + count, 0);
}