1. 문제 링크
2. 문제 및 입출력예제
3. 문제 풀이
기타줄의 패키지 가격은 배열에 저장하고, 낱개 가격은 제일 작은 가격만 저장한다.
최솟값은 각 패키지로 샀을 때의 가격마다 패키지로 사고 남은 만큼 낱개로 사는 가격으로 했다.
그렇게 구한 패키지를 샀을 경우의 최솟값과 낱개만으로 샀을 때의 가격을 비교해서 출력한다.
근데 다시 보니까 둘 다 최솟값만 구했으면 배열을 사용하지 않아도 되니까 더 좋을 것 같았다.
근데 유의미한 차이는 없더라...ㅎ
4. 코드
- 처음 푼 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] nm = br.readLine().split(" ");
int N = Integer.parseInt(nm[0]);
int M = Integer.parseInt(nm[1]);
int min = Integer.MAX_VALUE;
int[] six= new int[M];
int one = Integer.MAX_VALUE;
int temp=0, num;
for(int i=0;i<M;i++) {
String[] split = br.readLine().split(" ");
six[i] = Integer.parseInt(split[0]);
one = Math.min(one, Integer.parseInt(split[1]));
}
for(int i=0;i<M;i++) {
num = N/6;
temp = N/6*six[i];
if(num*6 <N) {
temp +=six[i];
min = Math.min(temp, min);
temp -=six[i];
temp += N%6*one;
min = Math.min(temp, min);
}
else {
min = Math.min(temp, min);
}
temp = one*N;
min = Math.min(temp, min);
}
System.out.println(min);
}
}
- 둘 다 최솟값으로 푼 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
public class Main {
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] nm = br.readLine().split(" ");
int N = Integer.parseInt(nm[0]);
int M = Integer.parseInt(nm[1]);
int min = Integer.MAX_VALUE;
int six = Integer.MAX_VALUE;
int one = Integer.MAX_VALUE;
int temp = 0, num;
for (int i = 0; i < M; i++) {
String[] split = br.readLine().split(" ");
six = Math.min(six, Integer.parseInt(split[0]));
one = Math.min(one, Integer.parseInt(split[1]));
}
num = N / 6;
temp = N / 6 * six;
if (num * 6 < N) {
temp += six;
min = Math.min(temp, min);
temp -= six;
temp += N % 6 * one;
min = Math.min(temp, min);
} else {
min = Math.min(temp, min);
}
temp = one * N;
min = Math.min(temp, min);
System.out.println(min);
}
}
'ALGORITHM' 카테고리의 다른 글
백준 1541 잃어버린 괄호 (Java) (0) | 2023.03.18 |
---|---|
백준 1987 알파벳 (Java) (0) | 2023.03.17 |
백준 17135 캐슬 디펜스 (Java) (0) | 2023.03.16 |
백준 1697 숨바꼭질 (Java) (0) | 2023.03.16 |
백준 2577 숫자의 개수 (Java) (0) | 2023.03.15 |