728x90
문제
https://programmers.co.kr/learn/courses/30/lessons/68644
코딩테스트 연습 - 두 개 뽑아서 더하기
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한
programmers.co.kr
코드
function solution(numbers) {
let tmp = [];
let answer = [];
const len = numbers.length;
let sum = 0;
for (let i=0; i<len; i++) { //배열에서 서로다른 두 수를 뽑아
for (let j=i+1; j<len; j++) {
sum = numbers[i]+numbers[j];
tmp.push(sum); //더한 값을 tmp에 push
}
}
tmp.forEach((i) => { //tmp 배열의 중복을 제거하여 answer에 push
if (!answer.includes(i)) {
answer.push(i);
}
});
answer.sort(function(a, b) { //answer 배열 오름차순 정렬
return a-b;
});
return answer;
}
후기
- 문제를 보자마자 이중 for문을 통해 각 자리별 sum을 배열에 담아 중복을 제거하고 정렬해야겠다고 생각했다
- 중복을 제거하는 과정에서 불필요하게 코드가 길어진 게 아쉬웠다
- 왜냐하면 다른 분의 풀이에서는 밑의한줄로 끝내버렸기 때문
-
const answer = [...new Set(temp)]
- 이 코드에서 뿐만 아니라 배열에 관련된 문제를 풀 때 다른 분들의 풀이를 보면 종종 '...' 문법을 쓰는 것을 볼 수 있었다. 이참에 찾아보았는데, '...'은 쉽게 말해 바로 뒤에나오는 변수 등의 '전체'를 의미한다
- ex) const a = [1,2,3]; 일 때, const b = [...a,4,5]; 이면, b = [1,2,3,4,5]가 된다
- 정렬을 할 때도, asnwer.sort() 만 했었는데, 자바스크립트에서는 sort()안에 어떠한 조건을 주지 않으면 기본적으로 유니코드에 따라 오름차순 정렬이 된다는 것을 알았다. 그래서 내가 원하는 진짜 오름차순을 하기 위해서는 위와 같은 조건이 필요했다
'알고리즘 > Programmers' 카테고리의 다른 글
[Programmers] 오픈채팅방 / JavaScript (0) | 2022.01.11 |
---|---|
[Programmers] 실패율 / JavaScript (0) | 2022.01.11 |
[Programmers] 124 나라의 숫자 / JavaScript (0) | 2022.01.08 |
[Programmers] 기능개발 / JavaScript (0) | 2022.01.07 |
[Programmers] 체육복 / JavaScript (0) | 2022.01.07 |