프로그래머스

[JavaScript] 푸드 파이트 대회 - 프로그래머스

jjangsh 2024. 9. 19. 23:22

문제 :

 

내 풀이 : 

function solution(food) {
    let result = '';
    
    for(let i = 1; i < food.length; i++) {
         result += String(i).repeat(Math.trunc(food[i] / 2));
    }
    
    const reversedResult = result.split('').reverse().join('');
    result = result + "0";
    
    return result + reversedResult;
}

 

 

1.  먼저 result라는 빈 문자열을 선언한다. 이 변수는 최종적으로 반환할 문자열을 만들기 위해 선언하였다.

 

2. 여기서 반복문이 시작된다.

for (let i = 1; i < food.length; i++) {
  result += String(i).repeat(Math.trunc(food[i] / 2));
}

 

i = 1부터 food.length까지 반복한다.

 

각 반복에서 food[i] 값의 절반(소수점 이하 버림)을 계산한 후, 그 값만큼 i를 문자열로 변환하여 result에 추가한다.

 

예를 들어, food[i] = 5라면 Math.trunc(food[i] / 2)는 2가 되고, String(i).repeat(2)는 '2'가 두 번 반복된 '22'가 된다.

 

즉, 각 food[i] 값의 절반에 해당하는 숫자 i를 반복해서 문자열로 추가한다.

 

3. reversedResult는 result를 반전시킨 문자열이다.

const reversedResult = result.split('').reverse().join('');

 

result.split('')는 result 문자열을 한 글자씩 쪼개어 배열로 만든다.

 

reverse()는 배열의 순서를 뒤집는다.

 

join('')은 배열을 다시 문자열로 합친다.

 

4. result 문자열에 '0'을 추가합니다. 즉, 가운데에 0을 삽입한다.

result = result + "0";

 

 

5. 마지막으로, 원래의 result에 reversedResult를 이어 붙여서 최종 결과를 반환한다.

return result + reversedResult;
}

 

 

예시

food = [0, 3, 4, 6] 이라고 가정한다.

  • i = 1일 때: Math.trunc(3 / 2)는 1이므로, '1'이 result에 추가된다. 현재 result = '1'
  • i = 2일 때: Math.trunc(4 / 2)는 2이므로, '2'가 두 번 반복되어 result = '12'
  • i = 3일 때: Math.trunc(6 / 2)는 3이므로, '3'이 세 번 반복되어 result = '12333'

다음으로 result를 반전시키면 reversedResult = '33321'이 된다.

  • 그 후, result = '12333' + '0'이 되어 '123330'이 된다.
  • 마지막으로 result + reversedResult = '123330' + '33321'이 되어 최종적으로 '12333033321'이 반환된다.