문제 : https://www.acmicpc.net/problem/1049
1049번: 기타줄
첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주어진다. 가격은 0보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
www.acmicpc.net
문제 요약 : 기타줄 N줄을 사기 위한 최소비용
입력 | 출력 |
1 ≤ N(기타줄) ≤ 100 1 ≤ M(브랜드) ≤ 50 0 ≤ M줄의 6줄 1줄 비용 ≤ 1000 |
기타줄 N줄을 사기 위한 최소 비용 |
JAVA
채점 번호 | 아이디 | 문제 번호 | 결과 | 메모리 | 시간 | 언어 | 코드 길이 |
16511324 | cbkpar | 1049 | 맞았습니다!! | 13092KB | 72ms | Java | 938B |
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n,m,i,one,six,s;
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
one = 1000; //초기에 최댓값으로 지정
six = 1000; //초기에 최댓값으로 지정
for(i=0;i<m;i++) {
st = new StringTokenizer(br.readLine());
six = Math.min(six, Integer.parseInt(st.nextToken()));
one = Math.min(one, Integer.parseInt(st.nextToken()));
}
s=(six>=one*6)?(n/6)*6*one:(n/6)*six; // 6개 단위로 묶음(6개)와 1개 비교
n%=6; //묶음과 1개로 사고 남은 나머지
s+=(six>=one*n)?one*n:six; // 묶음(6개) 와 1개로 샀을때 가격 비교
bw.write(s+"\n");
br.close();
bw.close();
}
}
'백준온라인' 카테고리의 다른 글
[백준온라인] 1138번 한 줄로 서기 (0) | 2019.12.18 |
---|---|
[백준온라인] 1120번 문자열 (0) | 2019.12.18 |
[백준온라인] 6603번 로또 (0) | 2019.12.17 |
[백준온라인] 2042번 구간 합 구하기 (0) | 2019.12.14 |
[백준온라인] 10868번 최솟값 (0) | 2019.12.12 |