본문 바로가기
기초다지기/JS 코딩테스트

javaScript 푸드파이트 대회

by 김빵그 2023. 11. 27.

문제 

주어진 조건에 따하 정수 배열 food가 주어지며 이 배열은 칼로리가 적은 순서대로 음식의 양이 나타냄, 각 원소는 해당 음식의 수를 나타내어 둘이서 먹을 음식의 배치를 리턴

나의 풀이 

function solution(food) {
    var answer = '';
 
    for(let i = 0; i < food.length; i++) {
        var count = Math.floor(food[i] / 2);

        answer += i.toString().repeat(count);
    }
     var re = answer.split('').reverse().join('');
     return answer + "0" + re;
}
  • food 배열을 for문으로 돌린다
    • 각 요소에 대해 2로 나눈 후 내림을 적용 (floor)
    • answer 문자열에 i를 count만큼 추가한다 
  • re 변수에 answer 문자열 리버스 저장후 리턴

다른 풀이

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('');
}
  • 짧게 리팩토링
function solution(food) {
    let player1 = [];
    let player2 = [];
    let repeat = 0;
    for (let i = 1; i <= food.length; i++) {
        if (food[i] > 1) {
            repeat = Math.floor(food[i] / 2);
            for (let j = 0; j < repeat; j++)
                player1.push(i)
            for (let k = 0; k < repeat; k++)
                player2.unshift(i)
        }
    }
    player1.push(0);
    player1 = player1.concat(player2);
    return player1.join("");
}
  • push, unshift를 사용하여 조건에 맞게 추가