이 문제는 간단한 형태의 나눗셈과 적절한 곱 연산만 하면 풀 수 있는 문제입니다. Silver IV 문제로 분류되어 있지만, 그보다는 난이도는 더 쉬워보입니다. 단지 정답률이 29.3%로 상당히 낮습니다.
이 문제는 선입관이 있으면 실수할 수도 있다고 봅니다. 묶음상품의 단가가 개별상품의 가격보다 싸야할거라는 것과 묶음상품이 싼 곳이 개별상품 가격도 쌀거라는 선입관을 버리면 쉽게 풀 수 있습니다.
문제의 내용은 기타줄을 사는데, 필요한 기타줄의 갯수가 주어지고, 그 갯수에 맞추어서 기타줄 상점에서 파는 6개들이 묶음상품과 개별 상품을 적절하게 사서 가장 싼 가격에 필요한 기타줄을 사는 문제입니다.
다음은 이 문제의 링크입니다.
https://www.acmicpc.net/problem/1049
문제를 풀기 위해서는 각 상점에서 파는 묶음 상품의 최저가와 개별 상품의 최저가를 저장합니다. 그런후에 묶음상품이 개별상품을 6개 사는 것보다 싼지 검사하고, 비싸다면 묶음상품의 가격을 개별상품*6으로 저장합니다. 필요한 기타줄의 갯수를 6으로 나눈 나머지가 개별상품을 사야하는 것이지만, 이마저도 나머지 갯수*개별상품 가격을 한 것이 묶음상품 가격보다 비싸다면 그냥 묶음상품을 사는 것이 나으므로 그 예외처리를 해줍니다.
실수할만한 예제를 모아서 올려드립니다.
입력 | 출력 |
13 3 24 3 30 5 29 4 |
39 |
17 3 23 5 29 4 19 6 |
57 |
98 7 39 6 38 7 36 8 35 9 34 10 33 11 32 12 |
524 |
제가 작성한 소스입니다. 소스는 참고용으로 봐주세요.
//----------------------------------------------------------------------------------------
// baekjoon #1049 - Guitar string
// - by Aubrey Choi
// - created at 2019-11-20
//----------------------------------------------------------------------------------------
#include <stdio.h>
int main()
{
int n, m, a, b, mp=1000, ms=1000;
scanf("%d%d",&n,&m);
while(m--) { scanf("%d%d",&a,&b); mp=(a<mp)?a:mp; ms=(b<ms)?b:ms; }
if(ms*6<mp)mp=ms*6;
ms=((n%6)*ms>mp)?mp:(n%6)*ms;
printf("%d\n",(n/6)*mp+ms);
}
'Programming > BOJ' 카테고리의 다른 글
백준 #1057 토너먼트 (0) | 2019.12.29 |
---|---|
백준 #1051 숫자 정사각형 (0) | 2019.12.29 |
#1041 주사위(simple Implement) (0) | 2019.12.28 |
백준 #1038 감소하는 수 (2) | 2019.12.27 |
백준 #1037 약수 (0) | 2019.12.26 |
댓글