반응형
문제 설명
함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.
제한 조건
- x는 -10000000 이상, 10000000 이하인 정수입니다.
- n은 1000 이하인 자연수입니다.
문제 풀이
function solution(numbers) {
const answer = [];
for (let i = 0; i < numbers.length; i++) {
for (let j = i + 1; j < numbers.length; j++) {
const sum = numbers[i] + numbers[j];
if (answer.indexOf(sum) < 0) answer.push(sum);
}
}
answer.sort((a,b) => a - b);
return answer;
}
처음엔 배열에서 두 수를 뽑아 더하면 되겠다고 생각을 했는데, 그 기준이 없어 불가능하다는 걸 알았다.
그래서 i가 증가할 때마다 j = i + 1(자기 자신을 두 번 뽑으면 안됨)이 차례로 도는 이중for문을 사용했다. sum에 numbers의 두 수를 더한 값을 저장하고 indexOf()를 사용해 중복값을 제거했다. 그리고 sort()* 메서드를 통해 오름차순으로 정렬하였다.
*sort()
sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환한다. 정렬은 stable sort가 아닐 수 있다. 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따른다.
arr.sort([compareFunction])
compareFunction이 제공되지 않으면 요소를 문자열로 변환하고 유니 코드 코드 포인트 순서로 문자열을 비교하여 정렬된다. compareFunction이 제공되면 배열 요소는 compare 함수의 반환 값에 따라 정렬된다. a와 b가 비교되는 두 요소라면
- compareFunction(a, b)이 0보다 작은 경우 a를 b보다 낮은 색인으로 정렬해 a가 먼저 온다.
- compareFunction(a, b)이 0을 반환하면 a와 b를 서로에 대해 변경하지 않고 모든 다른 요소에 대해 정렬한다.
(ECMAscript 표준은 이러한 동작을 보장하지 않으므로 모든 브라우저에서 작동하지 않을 수 있다.) - compareFunction(a, b)이 0보다 큰 경우, b를 a보다 낮은 인덱스로 sort한다.
- compareFunction(a, b)은 요소 a와 b의 특정 쌍이 두 개의 인수로 주어질 때 항상 동일한 값을 반환해야한다. 일치하지 않는 결과가 반환되면 정렬 순서는 정의되지 않는다.
다른 사람 풀이
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)
}
Set()을 쓰다니 .. . 이것도 업보로 둔다
반응형