[코드테스트] 두 개 뽑아서 더하기

이강민·2021년 11월 16일
0

[코드테스트]Javascript

목록 보기
21/39
post-thumbnail

두 개 뽑아서 더하기

문제 설명

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

제한 사항

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

입출력 예

numbers result
[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 해야 합니다.

문제풀이

  1. 두개의 정수를 뽑아 만들 수 있는 수를 오름차순으로 배열로 만들기
  2. 2+1,2+3,2+4,2+1,1+3,1+4,1+1,3+4,3+1,4+1 // 3,5,6,3,4,5,2,7,4,5
  3. 정렬하기 //2,3,3,4,4,5,5,5,6,7
  4. 반복되는 수 지우기 //2,3,4,5,6,7

위와 같이 풀면 될 것 같다!

나의 풀이

function solution(numbers) {
    //더한 값을 담는 배열공간 만들기
    let sum=[];
    let sum_arr = [];
    //매개 변수 만큼 배열을 반복하는데 2번과 같이 더하려면 2차원으로 만들어야 한다.
    for (let i = 0; i < numbers.length; i++) {
        //i+1 만큼에서부터 시작하여 중복되지 않게 더한다.
        for (let j = i+1; j < numbers.length; j++) {
            //이때 10의 자리가 넘어가면 1과 0 인 2개의 수로 인식하기 때문에 콤마를 추가한다.
            sum += numbers[i] + numbers[j] +',';  
        }
    }
    // 단순 문자열로 연결된 값들을 콤마를 기준으로 새로운 배열로 만든다. 
    sum_arr = sum.split(',')
    // 새로운 배열만큼으로 반복을 시켜 문자열형태를 숫자형으로 형변환 시킨다. 
    for (let i = 0; i < sum_arr.length; i++) { 
         sum_arr[i] = parseInt(sum_arr[i])
    }
    sum_arr.sort((a,b) => a - b);
    //중복된 값들을 처리한다. (NaN을 제외시키기도 한다. )
    sum_arr = sum_arr.filter((val, idx)=> {
        return sum_arr.indexOf(val) === idx;
    })
    return sum_arr
}

다른 사람 풀이

아래에서 눈여겨 볼 코드는 new 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])
        }
    }
    //new Set은 중복된 value 를 가질 수 없는 set 객체이다. 
    // temp의 중복된 값을 담지 못한다는 것을 이용하여 적용시킨 듯 하다. 
    const answer = [...new Set(temp)]
    //아래와 같은 식을 한번에 표현한 것이다..
    // const answer = new Set(temp)
    // let an = [...answer]
//중복되 값을 제거 하였으니 이제 정렬된 값을 곧바로 리턴하면 된다.ㅣ
    return answer.sort((a, b) => a - b)
}
profile
AllTimeDevelop

0개의 댓글

관련 채용 정보