푸드 파이트 대회

이리·2024년 12월 22일
0
post-thumbnail

문제: https://school.programmers.co.kr/learn/courses/30/lessons/134240

문제설명

  • 주어진 파라미터: int[] food
  • 반환값: String
  • 음식 빨리 먹기 대회, 1:1 대결, 음식의 종류, 양이 바뀜
  • 먹기 대결 → 물 ←
  • 물을 먼저 먹는 선수가 승리
  • 칼로리가 낮은 음식을 먼저 먹을수 있음
  • 바보 수웅이는 대회 조건을 읽지 않음 → 홀수개 음식이 있음
  • 배치된 음식을 String으로 반환

풀이방식

  1. 사용할 수 있는 음식의 개수를 먼저 파악해야한다.
    • 홀수인 경우 -1 하기
  2. 개수대로 문자열에 추가해주면 된다.
    • food → 0 1 2 3 순서로 저장
  3. 넣는게 만만치않다.. 쉽게 넣으려면?
    • 넣을 개수를 정해주는 list 를 별도 생성 수 list 값만큼 직접 삽입..

코드

class Solution {
    public String solution(int[] food) {
        String answer = "";
        int[] list = new int[food.length];
        
        for(int i = 1; i < food.length; i++){
            if(food[i] % 2 == 1 ) food[i] -= 1;
            list[i-1] = food[i] / 2;
            System.out.println(list[i-1]);
        }
        
        for(int i = 1; i < food.length; i++){
            for(int k = 0; k < list[i-1]; k++){
                answer += i;
            }
        }
        
        answer += 0;
        
        for(int i = food.length-1; i >= 1; i--){
            for(int k = 0; k < list[i-1]; k++){
                answer += i;
            }
        }
        
        return answer;
    }
}

회고

직접 넣어준다는게 아무래도 굉장히 찝찝하다..

class Solution {
    public String solution(int[] food) {
        String answer = "0";

        for (int i = food.length - 1; i > 0; i--) {
            for (int j = 0; j < food[i] / 2; j++) {
                answer = i + answer + i; 
            }
        }

        return answer;
    }
}

반복되는 작업을 i + answer + i 로 처리해줌으로써 로직이 훨씬 간결해지는 것을 확인할 수 있다...


더 공부하자..

0개의 댓글