이번엔 좀 오래걸렸다. 너무 어렵게 생각해서 문제 이해를 조합을 써야하는걸로 알았고, 덕분에 조합을 구현하는 알고리즘을 만들어보려고 한참 고생했다. 결국 실패.. 이 문제는 다른 사람의 풀이를 보았고 답을 본 순간 너무 허무했다. 중첩 for문을 쓰면 되는거였어 .. 😂
💫 내가 짜려했던 조합 알고리즘과 그 답
const getCombinations = (array, selectNumber) => {
const results = [];
if(selectNumber === 1){
return array.map((element) => [element]);
}
array.forEach((fixed, index, origin) => {
const rest = origin.slice(index+1);
const combinations = getCombinations(rest, selectNumber - 1);
const attached = combinations.map((combination) => [fixed, ...combination]);
results.push(...attached);
});
return results;
}
console.log(getCombinations([1,2,3,4], 3));
매커니즘은 위와 같다.
이해하는데 이틀은 걸린 것 같다. 다음에 잘 써먹어야겠어.
💫 두 개 뽑아서 더하기 풀이
function solution(numbers) {
const temp = []
for (let i = 0; i < numbers.length; i++) {
for (let j = i + 1; j < numbers.length; j++) {
temp.push(numbers[i] + numbers[j])
}
}
const answer = [...new Set(temp)]
return answer.sort((a, b) => a - b)
}
✅ 문제에서 주어진 조건인 '서로 다른 인덱스' 는 두 가지 방식을 이용해 해결할 수 있다.
1.
for (let i = 0; i < numbers.length; i++) {
for (let j = i + 1; j < numbers.length; j++) {
temp.push(numbers[i] + numbers[j])
}
}
이 것처럼 중첩 for 문 속 j를 i보다 항상 더 많게 하여 안겹치게 하는 것.
2.
for(let i = 0; i < numbers.length; ++i){
let sum = 0;
for(let j = 0; j < numbers.length; ++j){
if(i != j){
set.add(numbers[i] + numbers[j]);
}
}
}
이 것처럼 i와 j 가 다를 경우에만 실행되게 하는 것.
✅ set 메소드에 대해서도 새롭게 알았는데 그건 다른 글에 정리해놓았다.
💫 reference
'Algorithm' 카테고리의 다른 글
7. 평균 구하기 (0) | 2021.09.12 |
---|---|
6. 자리 수 더하기 (LV.1) (0) | 2021.09.11 |
4. 서울에서 김서방 찾기 (LV.1) (0) | 2021.09.03 |
3. 핸드폰 번호 가리기 (LV.1) (0) | 2021.08.31 |
2. 이상한 글자 만들기 (LV.1) (0) | 2021.08.29 |