Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- React Natvive
- web view
- 상속 관계 매핑
- FlatList
- 완전탐색
- 자료구조
- 해외 대외활동
- BFS
- 폴더구조
- react
- ReactNative
- Project Bee
- 티스토리챌린지
- React Native
- bfs dfs
- 버튼 활성화
- 오블완
- 구현
- springboot
- service 테스트
- Navigation
- 창의충전소
- multipart upload
- 경우의 수
- 휴대폰 기기
- 백준 1992
- 원복
- 이영직
- 노마드코더
- 비트마스킹
Archives
- Today
- Total
유미의 기록들
[백준 4주차 - 19942] 다이어트 (Java) 본문
728x90
반응형
📌 문제
💻 코드
import java.util.*;
import java.io.*;
public class Main2{
static int n,targetMp,targetMf,targetMs,targetMv;
static int minCost=Integer.MAX_VALUE;
static class Ingredient{
int mp,mf,ms,mv,cost;
public Ingredient(int mp,int mf,int ms,int mv,int cost){
this.mp=mp;
this.mf=mf;
this.ms=ms;
this.mv=mv;
this.cost=cost;
}
}
public static void main(String[] args) throws IOException{
Scanner scanner=new Scanner(System.in);
n=scanner.nextInt();
targetMp=scanner.nextInt();
targetMf=scanner.nextInt();
targetMs=scanner.nextInt();
targetMv=scanner.nextInt();
Ingredient[] ingredients=new Ingredient[n];
for(int i=0;i<n;i++){
int mp=scanner.nextInt();
int mf=scanner.nextInt();
int ms=scanner.nextInt();
int mv=scanner.nextInt();
int cost=scanner.nextInt();
ingredients[i]=new Ingredient(mp,mf,ms,mv,cost);
}
Map<Integer,List<List<Integer>>> resultMap=new HashMap<>();
for(int i=1;i<(1<<n);i++){
int sumMp=0,sumMf=0,sumMs=0,sumMv=0,sumCost=0;
List<Integer> combination=new ArrayList<>();
for(int j=0;j<n;j++){
if((i&(1<<j))!=0){
combination.add(j+1);
sumMp+=ingredients[j].mp;
sumMf+=ingredients[j].mf;
sumMs+=ingredients[j].ms;
sumMv+=ingredients[j].mv;
sumCost+=ingredients[j].cost;
}
}
if(sumMp>=targetMp && sumMf>=targetMf && sumMs>=targetMs && sumMv>=targetMv){
if(sumCost<=minCost){
if(sumCost<minCost){
minCost=sumCost;
resultMap.put(minCost,new ArrayList<>());
}
resultMap.get(minCost).add(combination);
}
}
}
if(minCost==Integer.MAX_VALUE){
System.out.println("-1");
}else{
//같은 비용의 집합이 하나 이상이면 사전 순으로 가장 빠른 것 출력
List<List<Integer>> optimalCombinations=resultMap.get(minCost);
Collections.sort(optimalCombinations,(list1,list2)->{
for(int k=0;k<Math.min(list1.size(),list2.size());k++){
if(!list1.get(k).equals(list2.get(k))){
return list1.get(k)-list2.get(k);
}
}
return list1.size()-list2.size();
});
System.out.println(minCost);
for(int index:optimalCombinations.get(0)){
System.out.print(index+" ");
}
System.out.println();
}
}
}
728x90
반응형
'코딩테스트 기록 > 알고리즘 문제' 카테고리의 다른 글
[백준 4주차 - 5430] AC (Java) (0) | 2024.04.19 |
---|---|
[백준 4주차 - 11723] 집합 (Java) (0) | 2024.04.18 |
[백준 4주차 - 14890] 경사로 (Java) (0) | 2024.04.16 |
[백준 3주차 - 1987] 알파벳 (Java) (0) | 2024.04.14 |
[백준 3주차 - 3197] 백조의 호수 (Java) (0) | 2024.04.13 |
Comments