[白俊]精肉店-2258
リンク
リンクテキスト
質問する
恩恵は肉屋で肉を買いたい.一般的に、肉屋は自分の欲しい量といえば肉をいくら売っても、恩恵が訪れる肉屋は割引しているので、N枚の肉はもう切って売っています.
どれも一定の重さと価格があり、どれも買うと、それより安い肉が無料でもらえます(追加料金はかかりません).また、肉の部位ごとに異なる場合があるため、費用と重量の関係は比例しない可能性があります.恩恵はこの点を考慮せず,任意の部位が自分の欲しい量だけ購入すればよいと仮定した.また、価格がもっと安ければ、恩恵を必要とする量ではなく、より多くの肉を買うかもしれません.
各ブロックの情報を取得する場合は、恩恵購入に必要な肉の最低コストを計算するプログラムを作成します.
入力
第1行は2つの整数N(1≦N≦100000),M(1≦M≦2147483647)を与える.Nは塊の個数を表し、Mは恩恵を必要とする肉の量である.次のN行は、各肉の重量と価格を表す2つの整数を与える.重量の合計と価格の合計はそれぞれ2147483647を超えない.
しゅつりょく
最初の行に答えを印刷します.不可能な場合は-1を出力します.
に答える
問題を理解するのに1日くらいかかったようです.
だから週末は必ず復習し直します!!
リファレンスリンク
恩恵は肉屋で肉を買いたい.一般的に、肉屋は自分の欲しい量といえば肉をいくら売っても、恩恵が訪れる肉屋は割引しているので、N枚の肉はもう切って売っています.
どれも一定の重さと価格があり、どれも買うと、それより安い肉が無料でもらえます(追加料金はかかりません).また、肉の部位ごとに異なる場合があるため、費用と重量の関係は比例しない可能性があります.恩恵はこの点を考慮せず,任意の部位が自分の欲しい量だけ購入すればよいと仮定した.また、価格がもっと安ければ、恩恵を必要とする量ではなく、より多くの肉を買うかもしれません.
各ブロックの情報を取得する場合は、恩恵購入に必要な肉の最低コストを計算するプログラムを作成します.
入力
第1行は2つの整数N(1≦N≦100000),M(1≦M≦2147483647)を与える.Nは塊の個数を表し、Mは恩恵を必要とする肉の量である.次のN行は、各肉の重量と価格を表す2つの整数を与える.重量の合計と価格の合計はそれぞれ2147483647を超えない.
しゅつりょく
最初の行に答えを印刷します.不可能な場合は-1を出力します.
に答える
問題を理解するのに1日くらいかかったようです.
だから週末は必ず復習し直します!!
リファレンスリンク
最初の行に答えを印刷します.不可能な場合は-1を出力します.
に答える
問題を理解するのに1日くらいかかったようです.
だから週末は必ず復習し直します!!
リファレンスリンク
これまで閲覧した肉に同じ価格の肉がある場合は、該当する値(同じ)を追加してください.
これまで肉の重さはMを超え、最低価格で更新されていました
Code import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.StringTokenizer;
public class practice {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st=new StringTokenizer(br.readLine());
int n=Integer.parseInt(st.nextToken()); //덩어리의 개수
int m=Integer.parseInt(st.nextToken()); //필요한 고기의 양
int arr[][]=new int[n][2];
int answer=Integer.MAX_VALUE;
for(int i=0; i<n; i++)
{
StringTokenizer st1=new StringTokenizer(br.readLine());
int weight=Integer.parseInt(st1.nextToken());
int price=Integer.parseInt(st1.nextToken());
arr[i][0]=weight;
arr[i][1]=price;
}
//0이 무게, 1이 가격
//무게 내림차순, 가격 오름차순
Arrays.sort(arr, new Comparator<int[]>() {
public int compare(int[] o1, int[] o2)
{
if(o1[1] > o2[1]) //가격 오름차순
return 1;
else if(o1[1] == o2[1])
return Integer.compare(o2[0], o1[0]);//내림차순
else //정렬 X
return -1;
}
});
//temp : 무게의 누적 총 합을 구할 변수,
//same : 가격이 같을 때 가격의 누적 합
int temp=0, same=0;
boolean stop=false;
for(int i=0; i<n; i++)
{
temp+=arr[i][0]; //무게 누적 총합
if(i>=1 && arr[i-1][1] == arr[i][1])//이전과 가격이 같을때
same+=arr[i][1];
else same=0; //가격이 다를때
if(temp>=m) //조건 m보다 같거나 클 때
{
stop=true; //표시
answer=Math.min(answer, arr[i][1]+same);
}
}
if(stop)
System.out.println(answer);
else
System.out.println(-1);
}
}
Reference
この問題について([白俊]精肉店-2258), 我々は、より多くの情報をここで見つけました
https://velog.io/@ehdcks3421/백준-정육점-2258
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.StringTokenizer;
public class practice {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st=new StringTokenizer(br.readLine());
int n=Integer.parseInt(st.nextToken()); //덩어리의 개수
int m=Integer.parseInt(st.nextToken()); //필요한 고기의 양
int arr[][]=new int[n][2];
int answer=Integer.MAX_VALUE;
for(int i=0; i<n; i++)
{
StringTokenizer st1=new StringTokenizer(br.readLine());
int weight=Integer.parseInt(st1.nextToken());
int price=Integer.parseInt(st1.nextToken());
arr[i][0]=weight;
arr[i][1]=price;
}
//0이 무게, 1이 가격
//무게 내림차순, 가격 오름차순
Arrays.sort(arr, new Comparator<int[]>() {
public int compare(int[] o1, int[] o2)
{
if(o1[1] > o2[1]) //가격 오름차순
return 1;
else if(o1[1] == o2[1])
return Integer.compare(o2[0], o1[0]);//내림차순
else //정렬 X
return -1;
}
});
//temp : 무게의 누적 총 합을 구할 변수,
//same : 가격이 같을 때 가격의 누적 합
int temp=0, same=0;
boolean stop=false;
for(int i=0; i<n; i++)
{
temp+=arr[i][0]; //무게 누적 총합
if(i>=1 && arr[i-1][1] == arr[i][1])//이전과 가격이 같을때
same+=arr[i][1];
else same=0; //가격이 다를때
if(temp>=m) //조건 m보다 같거나 클 때
{
stop=true; //표시
answer=Math.min(answer, arr[i][1]+same);
}
}
if(stop)
System.out.println(answer);
else
System.out.println(-1);
}
}
Reference
この問題について([白俊]精肉店-2258), 我々は、より多くの情報をここで見つけました https://velog.io/@ehdcks3421/백준-정육점-2258テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol