Java
프로그래머스: 푸드 파이트
Daeryuk Kim
2024. 1. 19. 21:10
import java.util.*;
class Solution {
public String solution(int[] food) {
String answer = "";
for (int x=1; x<food.length; x++) {
int n = food[x] / 2;
for (int y=0; y<n; y++) {
answer += x;
}
}
answer += '0';
for (int x=food.length-1; x>=1; x--) {
int n = food[x] / 2;
for (int y=0; y<n; y++) {
answer += x;
}
}
return answer;
}
public static void main(String[] args) {
// 대회의 공정성을 위해 두 선수가 먹는 음식의 종류와 양이 같아야 하며, 음식을 먹는 순서도 같아야 합니다.
// 컨셉이 이렇다는 거 -> 중앙에는 물을 배치하고, 물을 먼저 먹는 선수가 승리하게 됨.
// 칼로리가 적은 순서대로
// 0: 물 1: 3개 2: 4개 3: 6개
// 결과는 1번 음식은 1개씩
// 2번 음식은 2개씩
// 3번 음식은 3개씩 먹어야 한다.
int[] food = {1, 7, 1, 2};
Solution sol = new Solution();
String result = sol.solution(food);
System.out.println(result); // 이 부분은 결과가 맞는지 확인하기 위한 출력문입니다.
}
}
아니 런타임 에러가 터졌다...
class Solution {
public String solution(int[] food) {
StringBuilder answer = new StringBuilder();
// 칼로리가 적은 순서대로 정렬
for (int x = 1; x < food.length; x++) {
int n = food[x] / 2;
appendRepeated(answer, x, n);
}
// 중앙에는 물을 배치
answer.append('0');
// 칼로리가 많은 순서대로 정렬
for (int x = food.length - 1; x >= 1; x--) {
int n = food[x] / 2;
appendRepeated(answer, x, n);
}
return answer.toString();
}
// 문자열에 숫자를 반복해서 추가하는 메소드
private void appendRepeated(StringBuilder sb, int x, int count) {
for (int y = 0; y < count; y++) {
sb.append(x);
}
}
public static void main(String[] args) {
int[] food = {1, 7, 1, 2};
Solution sol = new Solution();
String result = sol.solution(food);
System.out.println(result);
}
}
반복해서 111, 3333 숫자를 집어넣는 for 문을 appendRepeated 함수로 대체했다.
그 함수는 (문자열, n번째 음식, 반복할 횟수)가 들어가게 되는 것이다.
그렇게 나온 결과를 반환하면 끝이다.