본문 바로가기

코딩테스트

[프로그래머스] level1. 두 개 뽑아서 더하기 (javascript)

반응형

문제

정수 배열 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] 해도 된다.

반응형