티스토리 뷰

💡 문제

두 개 뽑아서 더하기

 

🔍 분석 및 계획

 문제 이해

조합(nCr)에 관한 문제이다

  • 입력 값 : 수 배열
    - 2 <= 배열의 길이 <= 100
  • 출력 값 : 모든 경우의 합을 포함하는 배열

 

가장 단순한 방법은 이중 반복문을 통해서 중복되지 않게 변수를 저장한뒤 정렬하여 출력하는 것이다

 의사코드 작성

// 합을 담을 객체 생성
// 이중 반복문을 사용해 객체에 두 수의 합 삽입 (key: 합 , value : 개수)
  // if(i와 j가 다를 경우)
    // 객체 값(키) +1

 

 

📝 코드 구현

의사코드 + 코드

function solution(numbers) {
  // 합을 담을 객체 생성
  let answer = {};
  // 이중 반복문을 사용해 객체에 두 수의 합 삽입 (key: 합 , value : 개수)
  for (let i = 0; i < numbers.length; i++) {
    for (let j = 0; j < numbers.length; j++) {
      // if(i와 j가 다를 경우)
      if (i !== j)
        // 객체 값(키) +1
        answer[numbers[i] + numbers[j]] =
          (answer[numbers[i] + numbers[j]] || 0) + 1;
    }
  }
  return [...Object.keys(answer)].map(Number).sort((a, b) => a - b);
}

 

최종 코드

function solution(numbers) {
  let answer = {};
  for (let i = 0; i < numbers.length; i++) {
    for (let j = 0; j < numbers.length; j++) {
      if (i !== j)
        answer[numbers[i] + numbers[j]] =
          (answer[numbers[i] + numbers[j]] || 0) + 1;
    }
  }
  return [...Object.keys(answer)].map(Number).sort((a, b) => a - b);
}

시간 복잡도 : O(n²) ----> n값에 제한이 없다면

 

💭 되돌아 보기

다른 사람 풀이

1.
Set을 이용한 중복 제거

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)
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함