본문 바로가기
C++ 코딩 문제 풀이/백준

[Baekjoon] 1049번: 기타줄

by 섬댕이 2023. 12. 26.

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

 

1049번: 기타줄

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

www.acmicpc.net

 


 

문제 해결 과정

착안

기타줄의 패키지 가격과 낱개 가격을 각각 별도의 배열에 저장한 다음 오름차순으로 정렬하고, 패키지로 구매하는 경우와 낱개를 구매하는 경우를 비교하여 문제를 해결한다.

 

구현

필요한 기타줄의 수를 $N$이라 할 때, 다음과 같이 두 가지 조건을 비교하여 문제를 해결할 수 있다.

  1. 패키지로 구매하는 경우와 낱개로 6 개씩 구매하는 경우를 비교한다.
  2. 패키지로 구매하는 경우와 $N$을 6으로 나눈 나머지만큼 기타줄을 낱개로 구매하는 경우를 비교한다.

 

[스포 주의] 아래 '더보기'를 누르면 코드가 나오니 주의하세요~

더보기
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> Package;
vector<int> Each;

int main()
{
	int N, M, cost;
	cin >> N >> M;

	while (M--)
	{
		int a, b;
		cin >> a >> b;
		Package.push_back(a);
		Each.push_back(b);
	}

	sort(Package.begin(), Package.end());
	sort(Each.begin(), Each.end());

	if (Package[0] < Each[0] * 6)
		cost = Package[0] * (N / 6);
	else
		cost = Each[0] * (N - N % 6);

	if (Package[0] < Each[0] * (N % 6))
		cost += Package[0];
	else
		cost += Each[0] * (N % 6);

	cout << cost << "\n";
	return 0;
}

 

실행 결과

'C++ 코딩 문제 풀이 > 백준' 카테고리의 다른 글

[Baekjoon] 1436번: 영화감독 숌  (1) 2023.12.22
[Baekjoon] 1890번: 점프  (0) 2023.12.21
[Baekjoon] 1019번: 책 페이지  (1) 2023.12.20
[Baekjoon] 2629번: 양팔저울  (0) 2023.12.15
[Baekjoon] 11967번: 불켜기  (0) 2023.12.14

댓글