문제 풀이 코드

function solution(progresses, speeds) {
    var answer = [];
    var count = 0;
    var time = 0;  // #1
    while(progresses.length > 0){
        if ((progresses[0] + speeds[0] * time) >= 100 ){  // #2
            count += 1;
            progresses.splice(0,1);
            speeds.splice(0,1);
            time -= 1;  // #3
        } else {
            if (count > 0){
                answer.push(count);  // #4
                count = 0;
            }
        }
        time += 1;
    }
    answer.push(count);
    return answer;
}

FIFO 구조에서 착안해서 코딩했다.

#1

하루가 지날때 마다 시간을 기록하는 변수

#2

진행도 + 작업 속도 X 시간 이 100보다 크면 count += 1

#3

같은 날에 이미 끝난 작업을 체크하기 위해 time -= 1

#4

더이상 끝난 다음 작업이 없으면 answer에 push 함

문제 풀이 코드

function solution(n, lost, reserve) {
    var answer = 0;
    var duplicatedStudent = []
    for (var i = 0; i < lost.length; i++){
        if (reserve.includes(lost[i])){
            duplicatedStudent.push(lost[i]);  // #1
        }
    }

    for (var student of duplicatedStudent){
        var reserveIdx = reserve.indexOf(student);  // #2
        reserve.splice(reserveIdx,1);
        var lostIdx = lost.indexOf(student);
        lost.splice(lostIdx,1);
    }

    answer = n - lost.length;  // #3

    for (var lostedStudent of lost){
        var canReserve = false;
        for (var i of [-1,1]){
            if (reserve.includes(lostedStudent + i)){  // #4
                const idx = reserve.indexOf(lostedStudent + i);
                reserve.splice(idx,1);
                answer += 1;
                break;
            }
        }
    }
    return answer;
}

#1

체육복이 도난 당했으면서, 여분의 체육복이 있는 사람 리스트를 저장해 둔다.

#2

미리 저장해둔 체육복이 도난 당했으면서, 여분의 체육복이 있는 사람을 lost, reserve 에서 제거한다.

#3

체육 수업을 들을 수 있는 사람 = 총 인원 - 체육복 잃어버린 사람
으로 만들어두고 친구에게 빌린 사람을 하나씩 추가한다.

#4

앞 번호 뒷 번호를 검사하면서 여분의 체육복이 있는 사람에게 체육복을 빌린다.

문제 풀이 코드

function solution(genres, plays) {
    var answer = [];
    var genreDict = {};
    for (var i = 0; i < genres.length; i++){
        if (!(genres[i] in genreDict)){
            genreDict[genres[i]] = [];
        }
        genreDict[genres[i]].push([i, plays[i]]);  // #1
    }

    var genreOrder = Object.keys(genreDict).sort(function(a,b){ // #2
        var aSum = genreDict[a].map( x => x[1]).reduce(function(sum,currValue){
            return sum + currValue;
        }, 0);

        var bSum = genreDict[b].map( x => x[1]).reduce(function(sum,currValue){
            return sum + currValue;
        }, 0);
        return bSum - aSum;
    });

    for (var genre of genreOrder){  // #3
        genreDict[genre].sort(function(a,b){
            return b[1]- a[1];
        });
    }

    for (var genre of genreOrder){  // #4
        try{
            answer.push(genreDict[genre][0][0]);
            answer.push(genreDict[genre][1][0]);
        }catch(error){
            continue;
        }
    }
    return answer;
}

#1

{"장르" : [[인덱스, 재생 횟수]]} 데이터 구조를 가지도록 전처리 했다.

#2

장르 순서를 가진 genreOrder 배열을 만들었다..

#3

같은 장르 간의 정렬을 했다.

#4

각 장르별 가장 재생 수가 많은 두 노래의 인덱스를 answer에 추가했다.
empty array 오류가 났기 때문에 try catch 문으로 처리했다.

문제 풀이 코드

function solution(clothes) {
    var answer = 1;
    var clothesDict = {}
    for (var i = 0; i < clothes.length; i++){ 
        if (clothes[i][1] in clothesDict){  // #1
            clothesDict[clothes[i][1]] += 1;
        }else{
            clothesDict[clothes[i][1]] = 1;
        }
    }
    for (var key in clothesDict){  // #2
        answer *= clothesDict[key] + 1
    }
    return answer - 1;  // #3
}

#1

만약 clothesDict 에 없는 key 값이 들어왔다면 1로 초기화 시키고, 존재한다면 1 을 더해줘 해당 의상 종류가 몇개가 있는지 저장합니다.

#2

의상 갯수 + 입지 않았을 때의 경우를 clothesDict[key] + 1로 표현했다.

#3

아무것도 입지 않았을 경우를 제외하기 위해 1을 빼주었다.

+ Recent posts