1. 조건
배열이 주어진다.
배열의 길이는 최대 13이라고 한다.
13에 3 조합을 해도 최대 경우의수는 286이므로
부루탈포스로 조져도 될 것 같다.
2. 풀이 과정
진짜 그냥 무지성 3중 for문 했더니 문제는 풀렸다.
하지만 이대로 Git에 커밋푸시를 하려고 보니 코드가 너무 더러워 보였다.
그래서 javascript의 고차함수 reduce를 활용해보기로 했다.
(reduce에 대해서 잘 모르기도 하고 클린 코드를 실천할 수 있다는 생각에 망설임 없이 바로 진행했다.)
3. 내 코드 (reduce 활용)
학생 3명이 모이면 reduce를 활용해서 배열을 순회하며 숫자를 더하는 방식이다.
그리고 내가 싫어 하는 재귀함수가 사용됐다.
function solution(number) {
let result = 0;
const combination = (current, start) => {
if (current.length === 3) {
result += current.reduce((acc, cur) => acc + cur, 0) === 0 ? 1 : 0;
return;
}
for (let i = start; i < number.length; i++) {
combination([...current, number[i]], i + 1);
}
};
combination([], 0);
return result;
}
4. 내 코드 (처음 풀이)
function solution(number) {
let answer = 0;
for (let i = 0; i < number.length - 2; i += 1) {
for (let j = i + 1; j < number.length - 1; j += 1) {
for (let k = j + 1; k < number.length; k += 1) {
const result = number[i] + number[j] + number[k];
if (result === 0) answer++;
}
}
}
return answer;
}
solution([-2, 3, 0, 2, -5]);
solution([-3, -2, -1, 0, 1, 2, 3]);
solution([-1, 1, -1, 1]);
5. reduce
const initialValue = 0;
const sumWithInitial = number.reduce(
(accumulator, currentValue) => accumulator + currentValue, initialValue
);
6. 총평
위의 두가지 풀이를 이 문제에 한정하여 풀이한다면 3중 for문이 2배 가량 빠르게 풀이된다
하지만 문제가 삼총사가 아니라 백총사라면 개선된 풀이처럼 조합함수를 따로 만드는것이 당연 이상적일것이다.
즉, 조건과 환경이 바뀐다면 당연코 유리한 코드는 조합함수를 따로 만든 코드라는 것이다.
'개발이야기 > 알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 햄버거 만들기 (0) | 2023.02.02 |
---|---|
[알고리즘] 프로그래머스 옹알이(2) (0) | 2023.02.01 |
[알고리즘] 프로그래머스 숫자 문자열과 영단어 (0) | 2023.01.31 |
[알고리즘] 프로그래머스 콜라 문제 (0) | 2023.01.30 |
[알고리즘] 프로그래머스 숫자 짝꿍 (0) | 2023.01.27 |