210824 과반수 넘은 숫자 구하기

박은정·2021년 8월 24일
0

문제

숫자로 이루어진 배열인 nums를 인자로 전달합니다.
숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.

예를 들어,

nums = [3,2,3]
return 3

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

가정

nums 배열의 길이는 무조건 2개 이상

문제이해

  • 인자 = 배열 (따로 .split('') 을 해줄 필요가 없다)
  • 배열의 처음부터 끝까지 탐색할 것이기 때문에 for문 사용한다
  • 동일한 숫자의 개수를 구해야 되는 것이 문제인데
    이는, 숫자 2개를 비교해야 하기 때문에 for문 2개를 사용한다
  • 동일한 숫자의 개수와 과반수를 비교할 것이기 때문에
    과반수숫자의 개수에 대한 변수를 만들면 편할 것 같다

정답

function moreThanHalf(nums) {
    let majority = nums.length / 2;

    for (let i = 0; i < nums.length; i++) {
        let count = 0;
        for (let j = 0; j < nums.length; j++) {
            if (nums[i] === nums[j]) count = count + 1
        }
        if (count > majority) return nums[i]
    }
}

코드해설

  1. 과반수를 나타내는 변수 만들기
let majority = nums.length / 2;
  1. 숫자2개 = 이중 for문
for (let i = 0; i < nums.length; i++) {
  for (let j = 0; j < nums.length; j++) {
  }
}
  1. for문을 돌리면서 배열의 처음부터 끝까지 확인할 때,
    해당하는 숫자의 개수를 나타낼 변수 나타내기 위해 for문 내부에 변수 지정
let count = 0;
  1. 두개의 숫자를 비교했을 때, 동일하면 count + 1 처리한다
if (nums[i] === nums[j]) count = count + 1
  1. for문을 실행하다가 count가 과반수를 넘기면, 해당하는 숫자를 반환한다
    return처리를 하기 때문에 for문도 강제로 종료된다
if (count > majority) return nums[i]
profile
새로운 것을 도전하고 노력한다

0개의 댓글