알고리즘 문제 연습

[프로그래머스, Java] 푸드 파이트 대회

codi-3 2024. 8. 6. 21:13

🔍문제


📊분석

  • 은 food array의 첫 번째이며 항상 1개만 존재한다.
  • Food array의 index값은 그 음식의 칼로리이고 value는 음식의 계수이다. (ex. [1,3,4,6] = 물 1개, 1 칼로리 음식 3개, 2 칼로리 음식 4개, 3 칼로리 음식 6개.) 
  • return 하는 값은 낮은 칼로리부터 높은 순으로 올라가며 0을 기준으로 대칭하는 구조이다. (이떄 완벽하게 2명에게 나눠지지 않는다면 남는 음식은 패기 된다)

✏️풀이

import java.util.*;
class Solution {
    public String solution(int[] food) {
        String answer = "";
        //값을 저장할 리스트 생성
        List<Integer> lst = new ArrayList<>();
        
        for(int i = 0; i<food.length; i++){
        //음식의 요소들을 반으로 나눈뒤 그곗수만큼 리스트에 추가
            int tmp = food[i]/2;
            while(tmp>0){
                lst.add(i);
                tmp--;
            } 
        }
        //첫번쨰 반 답에 추가
        for(Integer each: lst){
            answer+= Integer.toString(each);
        }
        //대칭할 반 정열
        Collections.sort(lst, Collections.reverseOrder());
        
        //대칭 기준점 0 추가
        answer += 0;
        
        //대칭된 값을 기준점 0 이후 추가
        for(Integer each: lst){
            answer+= Integer.toString(each);
        }
        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;
    }
}

 

문제를 푼 뒤 다른 분들의 풀이도 보았는데 훨씬 깔끔하고 클린 한 폼이었다. 앞으로 더 큰 프로젝트나 알고리즘을 풀게 된다면 코드의 인지복잡도를 위해 신경 써야 될 거 같다.