본문 바로가기
Programming/BOJ

백준 #1049 기타줄

by 작은별하나 2019. 12. 28.
반응형

이 문제는 간단한 형태의 나눗셈과 적절한 곱 연산만 하면 풀 수 있는 문제입니다.  Silver IV 문제로 분류되어 있지만, 그보다는 난이도는 더 쉬워보입니다.  단지 정답률이 29.3%로 상당히 낮습니다.

 

 

이 문제는 선입관이 있으면 실수할 수도 있다고 봅니다.  묶음상품의 단가가 개별상품의 가격보다 싸야할거라는 것과 묶음상품이 싼 곳이 개별상품 가격도 쌀거라는 선입관을 버리면 쉽게 풀 수 있습니다.

 

문제의 내용은 기타줄을 사는데, 필요한 기타줄의 갯수가 주어지고, 그 갯수에 맞추어서 기타줄 상점에서 파는 6개들이 묶음상품과 개별 상품을 적절하게 사서 가장 싼 가격에 필요한 기타줄을 사는 문제입니다.

 

다음은 이 문제의 링크입니다.

https://www.acmicpc.net/problem/1049

 

1049번: 기타줄

첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주어진다. 가격은 0보다 크거나 같고, 1,000보다 작거나 같은 정수이다.

www.acmicpc.net

 

문제를 풀기 위해서는 각 상점에서 파는 묶음 상품의 최저가와 개별 상품의 최저가를 저장합니다.  그런후에 묶음상품이 개별상품을 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);
}
728x90

'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

댓글