반응형
문제
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는두 개의 수를 뽑아더해서만들 수 있는 모든 수를 배열에오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
생각의 흐름
우선 배열을 정렬을 해야 문제가 풀릴 것 같아, 정렬을 하는 법을 찾아보았다.
array.sort()
배열 내 값들을 하나씩 더하면 될 것 같아서 반복문을 사용했다.
참조 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Loops_and_iteration
초기코드(오답)
function solution(numbers) {
let answer = [];
let input_arr = numbers.sort()
for (let i =0; i < input_arr.length-1; i++){
for (let j = i+1; j < input_arr.length; j++){
let result = input_arr[i] + input_arr[j]
if(answer.includes(result) == false){
answer.push(result) }
}
}
return answer;
}
문제점 : 정렬을 하고 덧셈을 하면, 결과값을 정렬 안해도 될줄 알았다.
게다가 sort를 그냥 해서 오름차순으로 명확히 정렬되지 않았다.
최종코드
function solution(numbers) {
let answer = [];
for (let i =0; i < numbers.length-1; i++){
for (let j = i+1; j < numbers.length; j++){
const result = numbers[i] + numbers[j]
if(answer.indexOf(result) == -1){
answer.push(result) }
}
}
answer.sort((a,b)=>a-b) return answer;
}
다른이들의 정답
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 객체 내에서는 중복값을 허용하지 않는 것을 이용하였다.
... 문법 : 배열과 객체를 편하게 사용하기 꺼내 쓰기 위한 자바스크립 표현식
참조사이트 : https://yuddomack.tistory.com/entry/자바스크립트-문법-비구조화-할당
MDN 참조사이트 : MDN
전개구문이라 표현한다.
- apply 대체
- new에 적용가능
- 배열복사
- 더 강력한 배열 리터럴
참조) 두 배열을 붙일때는 .concat()도 사용가능
그냥 arr = [...arr1,...arr2] 해도 된다.
반응형
'코딩테스트' 카테고리의 다른 글
[프로그래머스] level1. 같은 숫자는 싫어 (javascript) (0) | 2021.04.09 |
---|---|
[프로그래머스] level1. 3진법 뒤집기 (javascript) (0) | 2021.04.08 |
[프로그래머스] level1. 체육복 ( javascript) (0) | 2021.04.08 |
[프로그래머스] level1. 모의고사 (javascript) (0) | 2021.04.06 |
[프로그래머스] level1. 완주하지 못한 선수 (javascript) (0) | 2021.04.06 |