Notice
Recent Posts
Recent Comments
Link
Dev.baelanche
[백준 1049] 기타줄 본문
반응형
기타줄 6개 짜리 우선 구입 > 6개 짜리의 개수를 줄임 > 낱개 구입 순으로 각 케이스마다 돈의 최솟값을 그리디하게 찾아야 한다.
예를 들면,
n = 13, m = 1
6개 패키지 = 100 낱개 = 10
일때,
패키지 2개 + 낱개 1개 = 210
패키지 1개 + 낱개 7개 = 170
패키지 0개 + 낱개 13개 = 130
순으로 진행하며 매번 최솟값을 갱신한다.
구입할 수 있는 브랜드가 여러개일때는 6개 패키지와 낱개 를 각각 다른 브랜드에서 구입할 수 있으므로
완전탐색으로 해결했다.
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int brand[][] = new int[m][2];
int min = 100000000;
for(int i=0; i<m; i++) {
st = new StringTokenizer(br.readLine());
brand[i][0] = Integer.parseInt(st.nextToken());
brand[i][1] = Integer.parseInt(st.nextToken());
}
for(int i=0; i<m; i++) {
for(int j=i; j<m; j++) {
int pkg = 6;
while(pkg <= n) {
pkg += 6;
}
min = min(min, pkg / 6 * brand[i][0]);
pkg -= 6;
while(pkg > -1) {
int k = 0;
while(k + pkg < n) {
k++;
}
min = min(min, (pkg / 6 * brand[i][0]) + (k * brand[j][1]));
pkg -= 6;
}
}
}
bw.write(min + "\n");
bw.flush();
}
public static int min(int a, int b) {
return a > b ? b : a;
}
}
반응형
'Data Structure & Algorithm > PS - JAVA' 카테고리의 다른 글
[백준 1080] 행렬 (0) | 2019.06.04 |
---|---|
[백준 1541] 잃어버린 괄호 (0) | 2019.06.03 |
[백준 1946] 신입 사원 (0) | 2019.05.31 |
[백준 2455] 지능형 기차 (0) | 2019.05.31 |
[백준 10610] 30 (0) | 2019.05.31 |
Comments