문제를 쭉 읽고 풀이를 구상해보니 for문 2개를 돌리며 숫자를 더하고 마지막에 Set으로 중복을 제거해주면 될 것 같았다.
return 문에서 sort를 [...new Set(answer)].sort();
형태로 썼더니 처음에 두 번째 문제 테스트 케이스에서 의도하지 않은 [12, 2, 5, 7, 9]
가 나왔다.
사전 순이 아닌 숫자로 오름차순([2, 5, 7, 9, 12]) 되도록 하기 위해 .sort
뒤에 ((a, b) => a - b)
비교 연산을 추가해주었다.
function solution(numbers) {
let answer = [];
let len = numbers.length;
for (let i = 0; i < len - 1; i++) {
for (let j = i + 1; j < len; j++) {
answer.push(numbers[i] + numbers[j]);
}
}
return [...new Set(answer)].sort((a, b) => a - b);
}
보통 풀고 나서 '다른 사람의 풀이'를 보면 내 답과 다른 경우가 많아서 항상 이 코너에 기록했다. 그런데 이번 문제는 첫 번째 있는 답(= 모법 답안)이랑 똑같았다 👏👏
다른 방식의 풀이도 궁금해서 스크롤을 해보니 아예 처음부터 set으로만 푼 코드가 있었다. 흥미진진
function solution(numbers) {
const n = new Set();
for (i in numbers) {
for (j in numbers) {
if(i !== j) n.add(numbers[i] + numbers[j]);
}
}
return [...n].sort((a, b) => a - b);
}
for-in
으로 index만 꺼낼 수 있다.add
메서드 사용for-in을 쓰니 for문을 이중으로 써도 훨씬 간결해졌다.
어차피 마지막에 중복을 제거해야 한다면 이 방법 써 보기