알고리즘 문제 연습
[프로그래머스, 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;
}
}
문제를 푼 뒤 다른 분들의 풀이도 보았는데 훨씬 깔끔하고 클린 한 폼이었다. 앞으로 더 큰 프로젝트나 알고리즘을 풀게 된다면 코드의 인지복잡도를 위해 신경 써야 될 거 같다.