✔ 푸드 파이트 대회
문제 분석하기
0(물)을 기준으로 대칭이 되므로 한 선수가 먹는 음식의 순서를 정한 후 이를 이용하도록 함
예) 1223330333221
손으로 풀어보기
- 각 음식 당 한 선수가 먹을 수 있는 갯수를 계산
- 음식의 개수가 짝수일 때는 한 선수는 음식의 반을 먹을 수 있음
- 음식의 개수가 홀수일 때는 한 선수가 음식 - 1의 반을 먹을 수 있음
- 갯수에 따라 한 선수가 먹을 수 있는 음식 배치를 저장
- 한 선수가 먹을 수 있는 음식 배치에 물인 '0'을 배치한 후, 한 선수가 먹을 수 있는 음식의 배치를 뒤집어서 저장하여 반환
슈도코드 작성하기
food(준비한 음식의 양을 칼로리가 적은 순서대로 나타내는 정수 배열)
answer(대회를 위한 음식의 배치를 나타내는 문자열)
sb(음식 배치를 저장할 문자열 빌더)
for(i -> 1부터 food의 길이만큼) {
count(한 선수가 먹을 수 있는 음식의 개수)
if (food[i]가 짝수라면) {
count = food[i] / 2
}
else {
count = (food[i] - 1) / 2
}
sb.append(i번째 음식을 먹을 수 있는 개수만큼 반복하여 저장)
}
answer = sb + "0"
answer += sb를 뒤집어서 저장
answer 반환
코드 구현하기
/**
* 134240) 푸드_파이트_대회
*/
public class L062_134240 {
// food(준비한 음식의 양을 칼로리가 적은 순서대로 나타내는 정수 배열)
public String solution(int[] food) {
// answer(대회를 위한 음식의 배치를 나타내는 문자열)
String answer = "";
// sb(음식 배치를 저장할 문자열 빌더)
StringBuilder sb = new StringBuilder();
for (int i = 1; i < food.length; i++) {
// count(한 선수가 먹을 수 있는 음식의 개수)o
int count = 0;
// food[i]가 짝수라면
if (food[i] % 2 == 0) {
count = food[i] / 2;
} else {
count = (food[i] - 1) / 2;
}
// sb.append(i번째 음식을 먹을 수 있는 개수만큼 반복하여 저장)
sb.append(String.valueOf(i).repeat(count));
}
// 갯수에 따라 한 선수가 먹을 수 있는 음식 배치와 물을 저장
answer = sb + "0";
// sb를 뒤집어서 다른 한 선수가 먹을 수 있는 음식 배치를 저장
answer += sb.reverse();
// answer 반환
return answer;
}
// 테스트 케이스
public static void main(String[] args) {
L062_134240 solution = new L062_134240();
int[] food = { 1, 7, 1, 2 };
String result = solution.solution(food);
System.out.println(result);
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[133499] 옹알이 (2) (0) | 2023.12.13 |
---|---|
[133502] 햄버거 만들기 (0) | 2023.12.12 |
[135808] 과일 장수 (0) | 2023.12.11 |
[136798] 기사단원의 무기 (0) | 2023.12.11 |
[138477] 명예의 전당 (1) (0) | 2023.12.09 |