thumbnail

[lv.1] 푸드 파이트 대회 | 프로그래머스

[lv.1] 푸드 파이트 대회 | 프로그래머스

📋 [ 프로그래머스 ] 시리즈 몰아보기 (17)

✏️ (lv.1) : 푸드 파이트 대회

준비된 음식의 번호와 양을 나타내는 정수 배열 food가 주어진다. food는 칼로리가 적은 순서대로 정렬되어있으며 각 원소의 값은 해당하는 음식의 개수를 뜻한다. 가장 칼로리가 작은 1번 음식(물)을 중앙에 배치하고 나머지 음식을 물을 기준으로 대칭으로 배치하되 그 과정에서 남는 음식은 처분한다. 이때 반드시 칼로리가 작은 음식을 물에 가깝게 안쪽에 배치한다.

음식의 배치를 나타내는 문자열을 return하는 solution을 작성하라.


  • 2 <= food의 길이 <= 9
  • 1 <= food의 각 원소 <= 1,000
  • food[0]는 항상 1이다.
  • 정답의 길이가 3 이상인 경우만 입력으로 주어진다.

덱(deque) 자료형을 활용하여 각각의 정보를 덱의 head, tail에 삽입하는것으로 문제를 해결한다.

  • "0"을 포함한 배열 deque을 선언한다.

  • food 배열을 역순으로 반복하며 로직을 진행한다. 단 물에 해당하는 0은 이미 deque의 원소로 존재하기 때문에 1번 index까지만 반복한다.

    • 의 head, tail에 배치할 음식의 양 amountfood[i]를 2로 나눴을 때의 몫으로 지정한다.
    • 음식의 번호를 뜻하는 index값 문자열로 치환한 뒤 repeat() 메소드를 이용해 amount만큼 문자열을 곱한다.
    • 스프레드 연산자를 이용해 의 head에 삽입, push() 메소드를 이용해 의 tail에 item을 삽입한다.
  • join() 메소드를 이용해 문자열로 합쳐서 반환한다.

          
1 function solution(food) {
2 // deque = new Deque includes "0"
3 let deque = ["0"];
4
5 // for item of reversed food
6 for (let i = food.length - 1; i > 0; i--) {
7 // item = index of item * (amount of item / 2)
8 let amount = Math.floor(food[i] / 2);
9 let item = String(i).repeat(amount);
10
11 // push item at deque.head & deque.tail
12 deque = [item, ...deque];
13 deque.push(item);
14 }
15
16 return deque.join("");
17 }
18
# 프로그래머스
# JS
# javascript
# 코딩테스트
# 알고리즘
# 덱
# deque

💡 로그인 하지 않아도 댓글을 등록할 수 있습니다!

👨‍💻 관련 포스트