알고리즘

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

솔솔 2021. 3. 31. 09:00
반응형

여러분 안녕하세요 :>

오늘은 프로그래머스에서 풀어본 "두 개 뽑아서 더하기" 문제를 다뤄볼까 합니다.

 

문제 설명

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

풀이

넘어오는 numbers의 배열수 만큼 for문을 돌려줬어요! i와 j 배열 인덱스가 같지 않을 경우에는 두 개의 값을 더해 새로운 배열에 담아주었고, 마지막에 다 담긴 배열을 정렬해주었답니다!

 

emptyArr.sort(); 를 그냥 할 경우, String은 정렬이 되지만 int는 정렬이 안된다고해요!

그래서 sort((a, b) => a-b) 를 추가하여 작성하였습니다.

 

하단에 제가 작성한 코드입니다,,! 

풀이 방식은 구현하는 사람마다 매우 다르기때문에 그냥 이렇게 짜는 사람도 있구나 하고 생각해주쎄용😉

function solution(numbers) {
    var answer = [];
    var emptyArr = [];    
    for(var i=0; i<numbers.length-1; i++){
        for(var j=1; j<numbers.length; j++){
            if ( i != j){
                var data =  numbers[i] + numbers[j];
                
                if(emptyArr.indexOf(data) == -1){
                    emptyArr.push(data);
                }
            }
        }
    }
    answer = emptyArr.sort((a,b) => a-b);
    return answer;
}

 

여러분 화이팅팅팅입니다요~!

반응형