ah-ryeong / Ahgorithm

0 stars 0 forks source link

[JavaScript] 푸드 파이트 대회 #2

Open ah-ryeong opened 1 year ago

ah-ryeong commented 1 year ago

문제

수웅이는 매달 주어진 음식을 빨리 먹는 푸드 파이트 대회를 개최합니다. 이 대회에서 선수들은 1대 1로 대결하며, 매 대결마다 음식의 종류와 양이 바뀝니다. 대결은 준비된 음식들을 일렬로 배치한 뒤, 한 선수는 제일 왼쪽에 있는 음식부터 오른쪽으로, 다른 선수는 제일 오른쪽에 있는 음식부터 왼쪽으로 순서대로 먹는 방식으로 진행됩니다. 중앙에는 물을 배치하고, 물을 먼저 먹는 선수가 승리하게 됩니다.

이때, 대회의 공정성을 위해 두 선수가 먹는 음식의 종류와 양이 같아야 하며, 음식을 먹는 순서도 같아야 합니다. 또한, 이번 대회부터는 칼로리가 낮은 음식을 먼저 먹을 수 있게 배치하여 선수들이 음식을 더 잘 먹을 수 있게 하려고 합니다. 이번 대회를 위해 수웅이는 음식을 주문했는데, 대회의 조건을 고려하지 않고 음식을 주문하여 몇 개의 음식은 대회에 사용하지 못하게 되었습니다.

예를 들어, 3가지의 음식이 준비되어 있으며, 칼로리가 적은 순서대로 1번 음식을 3개, 2번 음식을 4개, 3번 음식을 6개 준비했으며, 물을 편의상 0번 음식이라고 칭한다면, 두 선수는 1번 음식 1개, 2번 음식 2개, 3번 음식 3개씩을 먹게 되므로 음식의 배치는 "1223330333221"이 됩니다. 따라서 1번 음식 1개는 대회에 사용하지 못합니다.

function solution(food) {    
    var answer = '';
    let 정렬 = [0];
    const length = food.length;

    for(let i = 0; i < length; i++) {
        if(food[i]/2 > 0) {
            let eatCnt = parseInt(food[i]/2);
            for(var j = 0; j < eatCnt; j++){
              let zeroIndex = parseInt(정렬.indexOf(0));
                정렬.splice(zeroIndex,0, (i));
                zeroIndex = parseInt(정렬.indexOf(0));
                정렬.splice((zeroIndex+1),0, (i));
            };
        }
    }
    return answer = 정렬.join("");
}

solution([2, 4, 7]);
ah-ryeong commented 1 year ago

이렇게 구구절절 어거지로 푸는게 맞는지 현타맞으면서 다른 사람 풀이 봤더니 진짜로 나만 어거지로 풀었네;

function solution(food) {
     let res = '';     
     for (let i = 1; i < food.length; i++) {
         res += String(i).repeat(Math.floor(food[i]/2));
     } 
     return res + '0' + [...res].reverse().join('');
 }

repeat에 Math에 reverse에... 나는 생각지도 못한 내장함수 사람들은 잘 활용하네.. 오늘도 하염없이 눈물만 흘리는 나...