[프로그래머스] 🔢억억단을 외우자

Chobby·2024년 6월 20일
1

Programmers

목록 보기
346/349

😎나의풀이

function solution(e, starts) {
    // 1. 1부터 e까지의 수가 등장한 횟수를 저장할 배열 생성 (최대 5,000,000까지 필요)
    const countArr = new Array(5000001).fill(0)

    // 2. 1부터 e까지의 모든 수에 대해 등장 횟수 계산
    for (let i = 1; i <= e; i++){
        for (let j = 1; j <= e / i; j++){
            countArr[i * j]++;
        }
    }

    // 3. 각 퀴즈에 대한 답을 구하기 위해 starts 배열을 정렬된 배열로 변환
    // 1회의 탐색만을 하기 위해 오름차 순으로 정렬 및 인덱스 첨부
    const startsWithIndex = starts.map((val, idx) => [val, idx])
    startsWithIndex.sort((a,b) => a[0] - b[0])

    // 4. e부터 1까지 내려가며, starts 배열에 존재하는 숫자에 대해 최대 등장 횟수를 가진 숫자 찾기
    let maxNum = [0,0]
    const result = []
    for(let i = e; i > 0; i--){
        if(startsWithIndex.length === 0) break;
        const count = countArr[i]
        if(maxNum[0] <= count) maxNum = [count, i];
        if(startsWithIndex.at(-1)[0] === i){
            result.push([maxNum[1], startsWithIndex.at(-1)[1]])
            startsWithIndex.pop()
        }
    }

    // 5. r 배열을 starts 배열 인덱스 순서대로 원상복구하여 각 숫자 반환
    result.sort((a,b)=> a[1] - b[1])
    return result.map(row => row[0])
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글