알고리즘

[Programmars] 두 개 뽑아서 더하기 (JavaScript)

프린벼르 2022. 1. 31. 23:16

두 개 뽑아서 더하기 문제 설명

1. 나의 생각 흐름

처음에는 단순하게 "뽑는다"는 단어를 보고 Math.floor(Math.random())함수를 사용해야하는 건가? 라는 생각을 먼저 하게 됬다. 하지만 계속 고민해보니, 배열에 있는 수를 2개씩 뽑아 더하는 것이니까 이중 for문을 사용해야겠다는 생각이 들었다.

2. 내가 쓴 코드

function solution(numbers) {
    let answer = [];
    //numbers[0]과 numbers[1], numbers[0]과 numbers[2] ... 이렇게 반복해서 하려면
    //이중 for문을 사용하기!!
    for(let i=0; i < numbers.length -1; i++){
        for(let j=i+1; j < numbers.length; j++){ 
            let a = numbers[i];
            let b = numbers[j];
            let sum = a + b;
            answer.push(sum);
            // set : 자바스크립트에서 중복되는 데이터를 제거
            const set = new Set(answer);
            const perfectAnswer = Array.from(set);
            answer = perfectAnswer;
        }
    }
    return answer.sort(function (a,b){return a-b;});
}
< 배열에서 중복 제거하는 Set함수 >
set은 유니크한 값만 저장할 수 있도록 하기 때문에 array에 넣게 되면, 중복되는 값이 사라진다.
상당히 유용하기 때문에 반드시 기억해둘 필요가 있다!!
//set1이라는 변수에 Set 객체에 매개값을 중복된 배열 arr을 넣어준 후 출력해 보면 중복된 값들을 제거되고 
//저장된 것을 확인할 수 있고, 이제 마지막으로 다시 새로운 배열에 담아주면 끝!!!
const arr = ['W', 'W', 'o', 'o', 'r', 'l', 'd'];
const set1 = new Set(arr)

//Array.from() 를 사용하여 배열 형식으로 변환해주면 중복 값이 제거된 배열 데이터 형식으로 정리된다.
const arr = ['W', 'W', 'o', 'o', 'r', 'l', 'd']; 
const set1 = new Set(arr); 
const arr2 = Array.from(set1);​

const array = ['0', 1, 2, '0', '0', 3];
Array.from(new Set(array)); 
// ['0', 1, 2, 3]​
//코드 한줄 정리

const arr = ['W', 'W', 'o', 'o', 'r', 'l', 'd'];
const set1 = new Set(arr);
const arr2 = Array.from(set1);

console.log(arr) // [ 'W', 'W', 'o', 'o', 'r', 'l', 'd' ];
console.log(set1) // Set { 'W', 'o', 'r', 'l', 'd' };
console.log(arr2) // [ 'W', 'o', 'r', 'l', 'd' ];

//한줄로 코드 정리
const arr3 = Array.from(new Set(arr));
console.log(arr3) // [ 'W', 'o', 'r', 'l', 'd' ];
1. 문자 정렬 : arr.sort()
2. 숫자 오름차순 정렬 : arr.sort( function(a,b){return a-b})
3. 숫자 내림차순 정렬 : arr.sort( function(a,b){return b-a})

3. 결론

숫자 오름차순 정렬이 정말 많이 쓰는 문법이라는 것을 느꼈다. 좀 더 익숙해지도록 많이 코드를 쳐봐야 할 것 같다. 또한 새로 배운 set함수도 익숙해질 수 있도록 자주 써봐야겠다.