백준 1049번 : 기타줄

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

찝찝하다. 왜 이렇게는 되는데 저렇게는 안되는거지의 전형적인 답답함. 한번 살펴보자.

#include <iostream>
using namespace std;

int main() {
	int N, M;
	cin >> N >> M;
	
	int package, onlyone, total = 0;
	int min_pack = 1000, min_only = 1000;
	for (int i = 0; i < M; i++) {
		cin >> package >> onlyone;
		if (min_pack > package)
			min_pack = package;
		if (min_only > onlyone)
			min_only = onlyone;
	}

	int q = (N / 6), r = (N % 6);
	total = min( min((q * min_pack) + (r * min_only), N*min_only),
    		    (q + 1) * min_pack);

	cout << total << endl;
	return 0;
}

비교해야 할 대상이 총 3개다.

  1. 6개가 담긴 package의 가격(1개당 가격 X 6) 보다 클 경우 : min((q * min_pack) + (r * min_only), N*min_only)
  2. (1개당 가격 X n) 보다 package의 가격 이 더 작을 경우 (이는 세번째 예시에서 확인할 수 있다.): min(total, (q + 1) * min_pack)

슬픈 이야기다. 1번째 요소를 확인하지 못해 여러번 실패했다. 그리고 이렇게 정리하고 코드를 짜야겠다. 코드 다 쓰고 글쓰니까 놓친 부분이 너무 많이 보인다.

좋은 웹페이지 즐겨찾기