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번째 음식, 반복할 횟수)가 들어가게 되는 것이다.

그렇게 나온 결과를 반환하면 끝이다.