금고털이
문제 링크 : https://softeer.ai/practice/6288
접근 방식
무게와 무게당 가격을 담은 배열을 만든다.
무게당 가격을 기준으로 배열을 내림차순 정렬한다.
무게당 가격이 높은 것부터 담아서 배낭을 채운다.
잘못된 접근
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int W = sc.nextInt(); // 배낭 무게
int N = sc.nextInt(); // 귀금속 종류
int arr[][] = new int[N][2];
for(int i=0; i<N; i++){
int M = sc.nextInt();
int P = sc.nextInt();
arr[i][0] = M; // 총 무게
arr[i][1] = P; // 무게당 가격
}
Arrays.sort(arr, (a, b) -> b[1] - a[1]); // 무게당 가격 기준 내림차순
int answer = 0;
for(int i=0; i<N && W>0; i++){
if (arr[i][0]<W){
W-=arr[i][0];
answer+=arr[i][0]*arr[i][1];
} else{
answer+=W*arr[i][1];
W=0;
}
}
System.out.println(answer);
}
}
시간초과가 났다.
잘 된 접근
입력받는 부분을 BufferedReader와 StringTokenizer로 변경했다.
결과
소스 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int W = Integer.parseInt(st.nextToken()); // 배낭 무게
int N = Integer.parseInt(st.nextToken()); // 귀금속 종류
int arr[][] = new int[N][2];
for(int i=0; i<N; i++){
st = new StringTokenizer(br.readLine());
int M = Integer.parseInt(st.nextToken());
int P = Integer.parseInt(st.nextToken());
arr[i][0] = M; // 총 무게
arr[i][1] = P; // 무게당 가격
}
Arrays.sort(arr, (a, b) -> b[1] - a[1]); // 무게당 가격 기준 내림차순
int answer = 0;
for(int i=0; i<N && W>0; i++){
if (arr[i][0]<W){
W-=arr[i][0];
answer+=arr[i][0]*arr[i][1];
} else{
answer+=W*arr[i][1];
W=0;
}
}
System.out.println(answer);
}
}
알게 된 점
없음.