Home 221107_Algorithm | 푸드파이트 대회(Lv.1)
Post
Cancel

221107_Algorithm | 푸드파이트 대회(Lv.1)

푸드파이트 대회 Algorithm(Lv.1)


문제 설명

  • 대결은 준비된 음식들을 일렬로 배치한 뒤, 한 선수는 제일 왼쪽에 있는 음식부터 오른쪽으로, 다른 선수는 제일 오른쪽에 있는 음식부터 왼쪽으로 순서대로 먹는 방식으로 진행됩니다. 중앙에는 물을 배치하고, 물을 먼저 먹는 선수가 승리하게 됩니다.
  • 두 선수가 먹는 음식의 종류와 양이 같아야 하며, 음식을 먹는 순서도 같아야 합니다. 또한, 이번 대회부터는 칼로리가 낮은 음식을 먼저 먹을 수 있게 배치
  • 예를 들어, 3가지의 음식이 준비되어 있으며, 칼로리가 적은 순서대로 1번 음식을 3개, 2번 음식을 4개, 3번 음식을 6개 준비했으며, 물을 편의상 0번 음식이라고 칭한다면, 두 선수는 1번 음식 1개, 2번 음식 2개, 3번 음식 3개씩을 먹게 되므로 음식의 배치는 “1223330333221”이 됩니다. 따라서 1번 음식 1개는 대회에 사용하지 못합니다.

제한사항

  • 2 ≤ food의 길이 ≤ 9
  • 1 ≤ food의 각 원소 ≤ 1,000
  • food에는 칼로리가 적은 순서대로 음식의 양이 담겨 있습니다.
  • food[i]는 i번 음식의 수입니다.
  • food[0]은 수웅이가 준비한 물의 양이며, 항상 1입니다.
  • 정답의 길이가 3 이상인 경우만 입력으로 주어집니다.


입출력 예시

foodresult
[1, 3, 4, 6]“1223330333221”
[1, 7, 1, 2]“111303111”


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function solution(food) {
  let answer = "";

  let front = "";
  let end = "";

  for (i = 1; i < food.length; i++) {
    for (j = 0; j < Math.floor(food[i] / 2); j++) {
      front += i; // 숫자 1부터 food[i]/2의 값만큼 나타남
    }
  }
  end = front.split("").reverse().join("");
  //0이후 뒤집기 위해 = 배열로 바꿔서 -> 역순으로 바꾼 뒤 -> 문자열로 반환
  answer = front + "0" + end;
  return answer;
}




나름 풀이

food[0] = 무조건 1(물인 0이 되는 부분)

0을 기준으로 front의 앞부분과 end의 뒷부분으로 나누어 생각함

front의 경우 for 반복문을 통해 1부터 숫자들을 뽑아냄(코드블록의 주석 확인)

front에 해당하는 문자열을 만든 뒤 그를 활용하여 end 뒷부분을 만들어 합쳐줌

This post is licensed under CC BY 4.0 by the author.