글 작성자: 개발자 올라프

문제

 

숫자로 이루어진 배열인 nums를 인자로 전달한다. 숫자중에서 과반수가 넘은 숫자를 반환해주세요.

nums 배열의 길이는 무조건 2개 이상으로 가정한다.

 

ex.

nums = [3, 2, 3] => return 3

nums = [2, 2, 1, 1, 1, 2, 2] => return 2

 


 

function moreThanHalf(nums) {
	const result = {};
    
    nums.map(item => {
    	if(result[item]) {
        	return result[item] = result[item] + 1;
        } else {
        	return result[item] = 1;
        }
    })
    
    for(let i in result) {
    	if(result[i] > (nums.length/2)) {
        	return Number(x);
        }
    }
}

 

객체를 생성해서 nums 배열에 담긴 숫자 값들을 아래와 같은 키와 값으로 객체에 담고자 하였다.

즉 [1, 1, 1, 1, 1, 2, 2, 4, 7, 8]와 같은 숫자가 배열에 담겨 있다면

이와 같이 객체에 담겨 있다면 문제 풀이가 쉬울 것이라 생각하였다.

nums.map(item => {
    if(result[item]) {
        return result[item] = result[item] + 1;
    } else {
        return result[item] = 1;
    }
})

map을 사용하여 result[item]으로 객체의 값들을 key값으로 가져왔고, 기존에 없던 key라면 1을 할당하고, 기존에 있는 key라면 1씩 더하는 로직을 생각했다.

 

for(let i in result) {
    if(result[i] > (nums.length/2)) {
        return Number(x);
    }
}

이후에 과반수라는 글 정의를 알아보면 '절반을 넘는 수'를 의미한다. 그래서 기존의 배열인 nums의 길이를 구하여(nums.length) 절반으로 나눈 후, 이 값보다 큰 값을 가지고 있는 key값을 리턴하도록 했다.