잿꽃's posting Garden

프로그래머스에서 코딩테스트 연습4 - 두 개 뽑아서 더하기 본문

WEB/코딩테스트 연습

프로그래머스에서 코딩테스트 연습4 - 두 개 뽑아서 더하기

잿꽃 2022. 5. 15. 01:55

임의의 배열에서 두 수를 뽑아 더해서 만들 수 있는 모든 수를 나타내기

 

ex) [2,1,3,4,1] -> [2,3,4,5,6,7]

 

 

 

배열[0]번일 때 배열[0]을 고정시키고 배열[1], 배열[2], 배열[3]... 를 각각 배열[0]과 더하고

배열[1]번일 때 배열[1]을 고정시키고 배열[2], 배열[3], 배열[4]... 를 각각 배열[1]과 더하는 방식을 이용하였다.

index가 증가함에 따라 i의 초기값도 증가해야 하므로 i와 index를 연결하였다.

function solution(numbers) {
    var answer = [];
    let result = [];
    for(let index = 0; index < numbers.length; index++){
        for(let i = index+1; i < numbers.length; i++){
            result.push(numbers[index] + numbers[i]);
        }
    }
    answer = [...new Set(result)].sort(function(a,b){return a-b});
    return answer;
}

오늘 이 문제를 풀면서 많은 것을 깨달았다.

 

 

첫 번째는 for(index in arr){}를 이용하면 index가 숫자를 갖고는 있지만 실제로는 String 타입이라는 것이다.

for(index in arr){
	// index는 String 속성이다.
	for(let i = index+1; i < arr.length; i++){}
	// i는 number의 값을 가진다.
	console.log(index+1); // index+1은 String + Number이기 때문에 1이 아닌 01이 나온다.
}

자꾸 NaN값이 나오길래 왜 그러는지 확인했더니 console.log로 확인해보니 값이 01, 02, 03... 이따구로 나왔다.

console.log(index);는 0, 1, 2... 가 나오지만 console.log(typeof index);는 String이 나왔다...(충격). 안 되는 이유가 있었던 것이다.

 

 

두 번째는 new Set()은 sort로 정렬이 되지 않는다는 점이다.

처음에는 이렇게 작성하였는데 문법적 오류라고 나왔다.

answer = new Set(result).sort(function(a,b){return a-b});

console.log로 확인을 하니 Set {num, num, num...}라고 나왔다. Set()은 순서가 없이 무작위로 호출된 값이기 때문에 list정렬이 안 되는 것이었다.

new Set()를 그대로 이용하지 않고 전개연산자로 복사하여 sort를 하니 해결되었다.

 

728x90
Comments