풀이방법
사용된 것:
그리디(Greedy)
2023.01.18
패키지 가격 중의 최솟값 (setMin), 낱개 가격 중의 최솟값 (oneMin) 을 각각 구한다.
M을 6으로 나눈 나머지 mod를 구한다.
다음의 3가지 경우에 따라 문제를 해결한다.
- setMin > (6 * oneMin)인 경우: 무조건 낱개로만 구매
- setMin <= (mod * oneMin)인 경우: 무조건 패키지로만 구매
- setMin <= (6 * oneMin) && setMin > (mod * oneMin)인 경우: M/6개만큼 패키지로, mod개만큼 낱개로 구매
코드
Java(2023.01.18)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//N과 M의 값 읽어오기
StringTokenizer st = new StringTokenizer (br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
//패키지별 & 낱개별 최솟값을 저장할 변수 선언 및 초기화
int setMin = Integer.MAX_VALUE;
int oneMin = Integer.MAX_VALUE;
for(int i=0; i<m; i++) {
//입력값 읽기
st = new StringTokenizer(br.readLine());
//최솟값 판단
setMin = Math.min(Integer.parseInt(st.nextToken()), setMin);
oneMin = Math.min(Integer.parseInt(st.nextToken()), oneMin);
}
//정답 계산 및 출력
int mod = n%6;
int answer = -1;
if(setMin> (6*oneMin)) {
answer = oneMin * n;
}
else if(setMin <= (mod*oneMin)) {
answer = setMin * ((n/6)+1);
}
else {
answer = (setMin * (n/6)) + (oneMin * mod);
}
System.out.print(answer);
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
#2884 : 알람 시계 (0) | 2023.03.08 |
---|---|
#5585 : 거스름돈 (0) | 2023.01.19 |
#15649 : N과 M (1) (0) | 2023.01.18 |
#2501 : 약수 구하기 (0) | 2023.01.16 |
#1918 : 후위 표기식 (0) | 2023.01.11 |