푸드파이트 대회 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 이상인 경우만 입력으로 주어집니다.
입출력 예시
food | result |
---|---|
[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 뒷부분을 만들어 합쳐줌