250x250
Notice
Recent Posts
Recent Comments
Link
«   2025/10   »
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 31
Archives
Today
Total
관리 메뉴

devlog_owen

[프로그래머스] 두 개 뽑아서 더하기 본문

algorithm/(js)프로그래머스

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

developer_owen 2023. 11. 15. 09:52
728x90

문제

 

배열 안에 있는 모든 숫자들을 두개씩 더한 경우의 수를 구하는 문제였다. 중복된 값이 없어야 하고 마지막에는 오름차순으로 배열을 정렬해야 한다. 

 


 

 

나의 풀이

function solution(numbers) {
   
    var caseNum = new Set();
    
    for(let i = 0; i<numbers.length; i++){
    
        for(let j = 0; j<numbers.length; j++){
            if(i !== j){
                caseNum.add(numbers[i] + numbers[j])
            }
        } 
     

    }
     let sortedNum =  Array.from(caseNum).sort((a,b) => a-b)
    return sortedNum;
}

 

저번에 영어 끝말잇기 문제에서 썼던 set을 사용했다. 비슷한 문제일거라 생각했는데 사실 set빼고는 좀 다른 문제긴 했다.

new Set으로 중복된 값을 허용하지 않는 유사객체배열을 만든다. 그다음 for문 중첩과 if문을 통해서 같은 번호의 인덱스가 아니라면 더해서 caseNum에 넘기는 코드를 짰다.

원래는 마지막에 Array.from없이 냅다 caseNum.sort~이렇게 썼는데 유사객체배열은 그런식으로 쓸수 없다고 한다.

Array.from()은 유사 배열 객체나 반복 가능한 객체를 배열로 변환하는 메서드다.

 

 


 

다른 사람 풀이

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)
}

 

[...new Set(temp)]을 쓰면 중복을 제거함과 동시에 배열로 전환할 수 있다. 

 


 

회고

 

set에 대해 좀더 배울 수 있었고 스프레드 연산자를 잘 사용할 수 있어야할것같다.


 

 

 

 

728x90