[프로그래머스] Lv 1. 두 개 뽑아서 더하기

morecodeplease·2024년 8월 22일
0

프로그래머스

목록 보기
21/23
post-thumbnail

🌭 문제 설명

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

🍗 제한 사항

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

🎁 입출력 예시

  • 입출력 예 #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) {
  let result = [];

  for (let i = 0; i < numbers.length; i++) {
    // i로 numbers 배열 순회
    for (let j = i + 1; j < numbers.length; j++) {
      // j는 i의 다음값부터 순회
      result.push(numbers[i] + numbers[j]);
    }
  }
  return [...new Set(result)].sort((a, b) => a - b);
}
  1. inumbers 배열을 순회한다.
  2. ji의 다음값부터 순회해서 result에 두 요소의 더한값을 push한다.
  3. new Set으로 중복을 없애주고, sort로 오름차순 정렬해준 값을 return한다.

🧵 다른 풀이

function solution(numbers) {
    var answer = [];

    numbers.forEach((v) => {
        const num1 = numbers.slice();

        let a = num1.indexOf(v);
        num1.splice(a, 1);

        num1.forEach((z) => {
            let num2 = v + z;

            if (!answer.includes(num2)) {
                answer.push(num2);
            }
        });
    });

    return answer.sort((a, b) => a - b);
}
  1. forEachnumbers배열 순회
  2. slice()numbers배열 얕은복사
  3. indexOf(v)로 현재 순회 중인 원소 v의 인덱스를 찾는다.
  4. num1.splice(a, 1)로 복사한 배열 num1에서 현재 원소 v를 제거한다. 다른 원소들과 조합을 만들기 위해 현재 원소를 제거
  5. 제거된 num1 배열의 나머지 원소들을 순회하며 v와 더한다.
  6. 조건문으로 이미 계산된 값이 answer에있는지 확인, 없으면 push
  7. answer를 오름차순으로 return

  • set을 사용해서 중복을 아주 간단히 제거해주었다.
profile
Everyday's a lesson

0개의 댓글