2024. 9. 3. 20:31ㆍ[Node.js_6기 본캠프 TIL]
◈ 고민 시작
서로 다른 인덱스에 있는 두 개의 수를 뽑아서 더했을 때 나오는 수의 모든 경우의 수를 구하는 문제이다. numbers에서 0번째 인덱스에 있는 수를 뽑았다면, 두번째로 뽑을 수는 1번째~n번째 수를 뽑아야 한다. 오름차순으로 정리함과 동시에 중복 제거 처리도 해야한다.
function solution(numbers) {
let answer = [];
for(let i=0; i<numbers.length; i++){
// 첫번째 수, num1 선언
for(let j=0; j<numbers.length; j++){
// 두번째 수, num2 선언
// i와 j가 같으면 서로 다른 수를 뽑은 게 아니므로, 불일치 조건 필요
// 불일치 할 경우에만 answer에 num1+num2 값을 밀어넣기
}
}
// answer 오름차순 정렬
// 중복 제거된 answer를 return하기
}
위와 같은 구조로 코드를 짜보기로 했다. 오름차순은 이전에 썼던 sort((a,b) => (a-b))를 사용하되, for문 안에서 돌면 불필요한 처리를 반복하게 되므로 밖에서 한번에 정리해주기로 했다. 중복 제거는 해본 적이 없는 것 같아서, 구글링의 힘을 빌렸다.
forEach, filter 등 다양한 방법이 나왔지만.... 이미 for문을 2번이나 돌리는 코드에서 너무 길어지는 것 같아, 간단하게 set을 써보기로 했다. Set 객체는 중복을 허용하지 않기 때문에 전개연산자(...)와 함께 배열 형태의 answer를 처리해주면 쉽게 중복값을 제거할 수 있었다.
◈ 풀이
function solution(numbers) {
let answer = [];
for(let i=0; i<numbers.length; i++){
const num1 = numbers[i];
for(let j=0; j<numbers.length; j++){
const num2 = numbers[j]
if(i !== j){
answer.push(num1+num2)
}
}
}
answer.sort((a,b) => (a-b))
return [...new Set(answer)];
}
★ 참고하면 좋은 방법
중복 제거 관련하여 자료를 찾아보던 중, 나중에 한번 써보고 싶은 함수를 찾았다. include()를 곁들인 reduce() 였다.
reduce()의 첫번째 인자는 기존 배열값이며, 두번째 인자는 새로운 배열이다. 만약 기존 배열(ac)이 이미 새로운 배열(v)과 같은 값을 가지고 있다면, 기존 배열값만 return하고 그렇지 않을 경우에는 새로운 배열값을 추가하여 return하는 방식이다. 다양한 상황에서 사용할 수 있다고 하는 만큼, 응용 예제를 더 찾아보면 좋을 것 같다.
'[Node.js_6기 본캠프 TIL]' 카테고리의 다른 글
[프로그래머스] 푸드 파이트 대회(JavaScript) (1) | 2024.09.05 |
---|---|
[Node.js] 미들웨어와 라이브러리 훑어보기 (0) | 2024.09.04 |
[Node.js_6기] 본캠프 TIL_0902 (0) | 2024.09.02 |
[Node.js_6기] 본캠프 TIL_0830 (0) | 2024.08.30 |
[Node.js_6기] 본캠프 TIL_0829 (0) | 2024.08.29 |