[코딩테스트/JS] 두 개 뽑아서 더하기

headerimg

두 개 뽑아서 더하기

문제 설명

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.


제한 사항

  • numbers의 길이는 2 이상 100 이하입니다.
    • numbers의 모든 수는 0 이상 100 이하입니다.


입출력 예

numbersresult
[2,1,3,4,1][2,3,4,5,6,7]
[5,0,2,7][2,5,7,9,12]


입출력 예 설명

입출력 예 #1

  • 2 = 1 + 1 입니다. (1이 numbers에 두 개 있습니다.)
  • 3 = 2 + 1 입니다.
  • 4 = 1 + 3 입니다.
  • 5 = 1 + 4 = 2 + 3 입니다.
  • 6 = 2 + 4 입니다.
  • 7 = 3 + 4 입니다.
  • 따라서 [2,3,4,5,6,7]return 해야 합니다.

입출력 예 #2

  • 2 = 0 + 2 입니다.
  • 5 = 5 + 0 입니다.
  • 7 = 0 + 7 = 5 + 2 입니다.
  • 9 = 2 + 7 입니다.
  • 12 = 5 + 7 입니다.
  • 따라서 [2,5,7,9,12]return 해야 합니다.

내 솔루션

function solution(numbers) {
  return numbers.map((el, i) => {
    return numbers.map((el2, j) => (i < j) ? el+el2 : undefined)
  }).flat().sort((a,b)=>a-b).filter((n, i, arr)=> n !== arr[i-1] && n !== undefined);
}

감상평

오래전에 풀었던 문제인데, 압축하고 짧고 멋지게 만든다고 고생 했던 기억이 있다.
2중 for문 대신에 2중 map을 써봤다. 이때부터 map과 filter에 꼿혀있는게 느껴진다.
짧게 만드는 것이 결국엔 남이 읽기엔 좋은 코드는 아닐 수 도 있겠구나 싶다. ㅋㅋ

그렇게 따지만 어글리파이 하는게 최고겠지?


© 2018. All rights reserved.