백준 1049 풀이

남기용·2021년 3월 4일
0

백준 풀이

목록 보기
4/109

링크텍스트

수학적으로 계산만 하면 되는 문제라 간단하게 풀린것 같다.
문제에서 강토가 기타줄을 사는 경우의 수는 총 3가지이다.

  1. 가장 싼 가격으로 낱개로만 사는 것
  2. 가장 싼 가격의 묶음으로 사야하는 개수에서 6을 나눈 몫+1개를 사는 것
  3. 가장 싼 가격의 묶음으로 사야하는 개수에서 6을 나눈 몫만큼 사고 나머지를 낱개로 사는 방법

이렇게 경우의 수를 나누고 나면 이제 그 방법대로 코드를 작성하면 되기때문에 간단하게 풀린다.

#include <iostream>
#include <deque>
#include <vector>
#include <string>
#include <string.h>
#include <sstream>
#include <cstdlib>
#include <algorithm>
using namespace std;

int main() {
	int answer = 0;
	int n;
	int m;
	cin >> n >> m;
	int arr[50][2];

	for (int i = 0; i < m; i++) {
		cin >> arr[i][0] >> arr[i][1];
	}

	int min = 1000000;

	int div = n / 6;
	int mod = n % 6;

	for (int i = 0; i < m; i++) {
		int tmp = arr[i][1] * n;
		if (tmp < min)
			min = tmp;
	}
	int result1 = min;

	min = 1000000;
	for (int i = 0; i < m; i++) {
		int tmp = arr[i][1] * mod;
		if (tmp < min)
			min = tmp;
	}
	answer += min;
	min = 1000000;
	for (int i = 0; i < m; i++) {
		int tmp = arr[i][0] * div;
		if (tmp < min)
			min = tmp;
	}
	answer += min;
	int result2 = answer;

	min = 1000000;
	int bundle = n / 6 + 1;
	for (int i = 0; i < m; i++) {
		int tmp = arr[i][0] * bundle;
		if (tmp < min)
			min = tmp;
	}
	int result3 = min;

	answer = result1 < result2 ? result1 : result2;
	answer = answer < result3 ? answer : result3;

	cout << answer << endl;
}
profile
개인용 공부한 것을 정리하는 블로그입니다.

0개의 댓글