지영이의 개발 블로그

✔[프로그래머스]두개 뽑아서 더하기 (중첩 for문) 본문

코딩/코딩테스트

✔[프로그래머스]두개 뽑아서 더하기 (중첩 for문)

이지영 2022. 6. 29. 15:57

✔문제 설명

정수 배열 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 해야 합니다.

<My solution>

🐰해설🐰

for 중첩문과 자바스크립트에서 중복을 제거하는 함수인 indexof를 사용해서 배열에 중복값이 없을때 answer배열에 push 해준후 오름차순 정렬

 

<Other solution>

🐰해설🐰

Set 객체와 spread 연산자를 사용해서 배열의 중복값을 제거해줌

 


 

배열에서 중복값 제거하는 방법

 

Set 객체와 spread 연산자 사용

Set 객체는 고유한 값을 가지는 객체입니다.

Set 객체를 생성하여 중복 값이 없는 객체를 생성하고 spread( ... ) 연산자를 사용하여 Set 객체를 배열로 변환합니다.

var arr = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5];

var setObj = new Set(arr);
console.log(setObj);

var setArr = [...setObj];
console.log(setArr);

실행 결과

 

filter 함수와 indexOf 함수 사용

filter 함수를 실행하여 순차적으로 배열의 요소를 순회합니다.

 

filter 함수를 순회하고 있는 배열 요소의 index를 구하기 위해 indexOf 함수를 사용합니다.

 

indexOf 함수는 동일한 요소가 존재할 경우 맨 앞에 있는 index를 반환하는 특징이 있습니다.

 

indexOf 함수가 반환한 indexfilter 함수를 순회하고 있는 index를 비교합니다.

 

동일하면, true를 반환하여 현재 배열 요소를 추가합니다.

다르면, 이미 추가되어 있으므로 false를 반환하여 추가하지 않습니다.

 

indexOf 함수를 사용하는 방법은 코드가 간결하지만, 배열의 요소가 많은 경우 효율성이 떨어집니다.

var arr = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5];

var uniqueArr = arr.filter(function(item, idx, self) {
    return self.indexOf(item) == idx;
})

console.log(uniqueArr);
// [1, 2, 3, 4, 5]

 

Comments