이 문제는 조건 서술을 매우 빈약하게 해 놓아서 푸는데 어려움이 있었다. 문제에서 제대로 설명이 안 된 조건은 바로 배열에 주어진 순서대로 연산이 이루어진다는 점이다. 예시 케이스도 [1, 1, 1, 1, 1] 뿐이라 이 조건이 전혀 설명이 되지 않는다.
풀이는 재귀를 이용했다. 지금까지 더해진 수를 sum 변수에 저장하고, 이번에 연산할 수가 sum에 더해진 것을 added, 뺀 것을 subbed에 저장했다. index을 1씩 늘려가며 recur 함수를 반복한다. index가 배열 끝에 달했을 때, added나 subbed가 원하는 target과 동일할 경우가 정답 케이스이다.
프로그래머스에는 이렇게 조건 설명이 허술한 문제들이 좀 있는 것 같다. 주의해야 할 듯..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
var answer = 0;
const recur = (numbers, sum, index, target, size) => {
const added = (sum + numbers[index]);
const subbed = (sum - numbers[index]);
if (index == size - 1) {
if (added == target || subbed == target) {
answer++;
}
return;
}
index++;
recur(numbers, added, index, target, size);
recur(numbers, subbed, index, target, size);
}
function solution(numbers, target) {
recur(numbers, 0, 0, target, numbers.length);
return answer;
}
|
cs |
'개발 > 알고리즘' 카테고리의 다른 글
[백준 11279][Python] 최대힙 자료구조 직접 구현하기, 시간초과 나는 이유 (0) | 2021.05.29 |
---|---|
[2021 카카오 신입 공채][Javascript] 메뉴 리뉴얼 (0) | 2021.04.25 |
[프로그래머스][Javascript] 체육복 (0) | 2021.04.25 |
[백준1021][Java] 회전하는 큐 (0) | 2020.04.29 |
[C++][백준 2178] 미로탐색 - 가중치가 없는 그래프의 최단경로? (0) | 2020.03.13 |
댓글