프로그래머스 Lv.0 [최빈값 구하기] (정답률 하위 TOP 10)

세나정·2023년 4월 22일
0

뜬금 생각난 팁.. 객체에선 includes가 아니라 some()을 활용하자!
function solution(array) {
    // answer: 최빈값을 저장하는 변수로
    // repeatCnt: 현재까지의 최대 등장 횟수를 저장하는 변수로, 초기값은 0으로 설정합니다.
    // before: 이전 원소의 값입니다. 반복문에서 현재 원소와 비교하기 위해 사용됩니다. 
    // cnt: 현재 원소의 등장 횟수를 저장하는 변수입니다. 초기값은 0으로 설정합니다.
    // isdup: 최빈값이 여러 개인지를 나타내는 플래그 변수입니다. 초기값은 false로 설정합니다.
    
     answer = 0 
     repeatCnt = 0 
     before = 0
     cnt = 0;
     isdup = false
    
    array = array.sort((a,b)=>a-b)

    for( i=0;i<array.length;i++)
    {   
        // 현재 숫자와 이전 숫자가 같지 않다면 cnt = 1
        // 즉, 새로운 숫자 카운트 시작 
        if (before != array[i]) {
            cnt=1
        }
        // 이전 숫자와 현재 숫자가 같으면 cnt+1
        else {
            cnt+=1
        }
        
        // 현재 원소의 등장 횟수가 여태 가장 컸던 반복수 크다면
        if(cnt > repeatCnt){
            // 현재 반복중인 원소의 반복수를 가장 컸던 반복수로 지정
            repeatCnt = cnt
            // 현재 역대급 반복수를 return 값으로 지정 
            answer = array[i]
            
            isdup = false
        }
        
        // 현재 반복하고 있던 수가 여태 가장 컸던 반복수랑 같다는 것은
        // 같은 반복수를 가졌다는 말
        // 그렇기 때문에 isdup을 true로 바꿔 -1을 리턴
        if(cnt==repeatCnt){
            // 현재 반복값이 아까 역대급 반복수랑 같지 않다면
            // 즉, 값은 다른데 반복수는 같은 경우 
            if(answer!==array[i])
                isdup=true
        }
        
        // 인덱스값을 before에 넣어줘서 
        // 다음 차례 때 비교할시 활용
        before = array[i]
    }
    
    if (isdup) {
         return -1
    }
    else {
        return answer; 
    }

}
profile
기록, 꺼내 쓸 수 있는 즐거움

0개의 댓글