
문제 설명
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
제한 사항
- numbers의 길이는 2 이상 100 이하입니다.
- numbers의 모든 수는 0 이상 100 이하입니다.
입출력 예
| numbers | result |
| [2,1,3,4,1] | [2,3,4,5,6,7] |
| [5,0,2,7] | [2,5,7,9,12] |
문제 풀이
function solution(numbers) {
var answer = [];
var sum=0;
for(let i=0; i<numbers.length; i++){
for(let j=i+1; j<numbers.length; j++){
let sum = numbers[i]+numbers[j];
answer.push(sum);
}
}
return [...new Set(answer)].sort((a,b)=>a-b);
}
뭔가 깔끔하게 푼 것 같아서 맘에 든다 ㅎ.ㅎ
우선 두 개의 수를 뽑아 더해서 나올 수 있는 모든 수를 이중 for문을 이용해 구해주고 배열의 Set 객체를 이용해서 중복된 부분을 제거해주었다. 마지막으로 sort를 이용해서 오름차순으로 담아서 return 하면 끝. 비교적 간단한 문제였다.
첫번째 시도때 그냥 sort()를 기본으로 사용해 정렬하였더니 한자리 수는 잘 정렬이 되었지만, 두 자릿수는 정렬이 제대로 되지 않았다.
찾아보니 sort()는 숫자를 문자로 변환한 뒤 유니코드 기준으로 크기를 비교하여 정렬하기 때문에 정렬이 제대로 적용되지 않는다고 한다.
따라서 숫자 배열을 올바르게 정렬하려면 sort((a, b)=> a-b)처럼 비교 함수를 명시적으로 지정해주어야 한다.
다른 풀이
function solution(numbers) {
var answer = [];
for(let i=0; i<numbers.length-1; i++){
for(let j=i+1; j<numbers.length; j++){
if(answer.indexOf(numbers[i]+numbers[j])===-1){
answer.push(numbers[i]+numbers[j])
}
}
}
return answer.sort((a,b)=>a-b);
}
이렇게 indexOf를 사용해서 푸는 풀이도 있었다. 중복된 부분을 제거하는 방법으로는 이외에도, filter와 indexOf() 조합, reduce() 등이 있었다. 중복 제거만 하더라도 이렇게 다양한 문법이 있는데, 여러 가지를 사용해 보고 익히는 연습을 해야겠다...!
'CodingTest' 카테고리의 다른 글
| [프로그래머스] Lv.1 소수 만들기 - JavaScript (1) | 2025.07.06 |
|---|---|
| [프로그래머스] Lv.1 소수 찾기 - JavaScript (0) | 2025.07.05 |
| [프로그래머스] Lv.1 이상한 문자 만들기 - JavaScript (0) | 2025.07.02 |
| [프로그래머스] Lv.1 정수 제곱근 판별 - JavaScript (3) | 2024.01.28 |
| [프로그래머스] Lv.1 핸드폰 번호 가리기 - JavaScript (1) | 2024.01.27 |