1. 문제에 대한 이해
- 우리가 풀어야 할 문제는 무엇인가?
- 개미 전사가 얻을 수 있는 식량의 최댓값을 구하라
- 주어진 자료는 무엇인가?
- N = 식량 창고의 개수
- K = 식량 창고에 저장된 식량의 개수를 나타낸 배열
- 조건은 무엇인가?
- 식량 창고를 털 때에는 서로 인접한 식량 창고를 털 수 없다. 반드시 한개의 식량 창고를 건너뛰어야한다.
2. 계획
- 홀수번에 있는 식량 창고를 털 경우
털 수 있는 식량창고의 인덱스는 1,3,5,7 ...
K의 홀수번 인덱스를 순회하면서 더한다.
- 짝수번에 있는 식량 창고를 털 경우
털 수 있는 식량 창고의 인덱스는 2,4,6,8 ...
K의 짝수번 인덱스를 순회하면서 더한다.
- 둘 중에 더 큰 값을 리턴한다.
3. 실행
- 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (K) => {
// 홀수번에 있는 식량 창고를 털 경우
// 털 수 있는 식량창고의 인덱스는 1, 3, 5, 7 ...
// K의 홀수번 인덱스를 순회하면서 더한다.
const odd = K.reduce((acc, cur, i) => {
if (i % 2) acc.push(cur);
return acc;
}, [])
.reduce((acc, cur) => acc + cur, 0);
// 짝수번에 있는 식량 창고를 털 경우
// 털 수 있는 식량 창고의 인덱스는 2, 4, 6, 8 ...
// K의 짝수번 인덱스를 순회하면서 더한다.
const even = K.reduce((acc, cur, i) => {
if (i % 2 === 0) acc.push(cur);
return acc;
}, [])
.reduce((acc, cur) => acc + cur, 0);
// 둘 중에 더 큰 값을 리턴한다.
return odd > even ? odd : even
};
test('foodValue', () => {
expect(solution([1, 3, 1, 5])).toEqual(8);
});
4. 반성
- reduce를 두번 사용하지않고 한번 사용하면서 값을 더할 수 있을 것 같다.
댓글