반응형
백준 1049번 기타줄 문제입니다.
자세한 문제내용은 글을 읽어보시길 바랍니다.
https://www.acmicpc.net/problem/1049
접근방법
해당 문제같은 경우 예제의 입력과 출력을 잘 보면 매우 간단하게 풀어낼 수 있는 문제입니다.
보통 이런 문제의 경우 묶음과 낱개를 함께 구매해야 한다고 생각할 수 있는데,
예제를 보면 묶음과 낱개를 따로따로 구매할 수 있습니다.
따라서 묶음 중 최소 가격, 낱개 중 최소 가격을 구한 뒤, 필요한 기타줄을 구입하기만 하면 됩니다.
코드를 보면서 어떻게 해야 하는지 알아봅시다.
#include<stdio.h>
int main() {
int n, m, i, a, b, pack = 1000, solo = 1000;
scanf("%d %d", &n, &m);
for (i = 0; i < m; i++) {
scanf("%d %d", &a, &b);
if (a < pack) pack = a;
if (b < solo) solo = b;
}
a = n / 6;
b = n % 6;
if (b * solo >= pack) {
printf("%d", pack * a + pack);
}
else if (solo * 6 < pack) {
printf("%d", n * solo);
}
else {
printf("%d", a * pack + b * solo);
}
return 0;
}
먼저, 끊어진 기타줄과 브랜드의 개수인 n, m을 scanf를 사용해 입력받습니다.
이후 반복문을 사용해 각 브랜드의 가격을 입력받는데, 이때 각각의 최솟값을 저장하면 됩니다.
문제에서 묶음과 낱개의 최댓값은 1000이라고 했기 때문에, 이와 비교해 더 작으면 바꿔줍니다.
최솟값을 구하셨다면 세 경우에 따라 각각 기타줄의 가격을 계산해주시면 됩니다.
1. 낱개로 구매하는 기타줄의 가격합이 기타줄 1묶음보다 비쌀 경우
기타줄을 묶음으로만 구매한다.
2. 기타줄 낱개 6개가 기타줄 1묶음보다 쌀경우, 즉 기타줄 낱개 1개 < 기타줄 1묶음 / 6일 경우
기타줄을 낱개로만 구매한다.
3. 위의 두 조건에 모두 포함되지 않을 경우
기타줄을 묶음, 낱개 각각의 최소 가격으로 구매한다.
이렇게 세 가지 경우에 따라 각각 다르게 가격을 계산해주시면 해결이 가능한 문제입니다.
반응형
'백준' 카테고리의 다른 글
백준1449번. 수리공 항승(파이썬) (0) | 2020.11.23 |
---|---|
백준 2529번. 부등호 (C언어) (0) | 2020.08.14 |
백준 10610번. 30 (C언어) (0) | 2020.08.12 |
백준 1541번. 잃어버린 괄호 (C언어) (0) | 2020.08.11 |
백준1931번. 회의실배정(C언어) (0) | 2020.08.10 |