백준

백준 1049번. 기타줄 (C언어)

닉네임못짓는사람 2020. 8. 13. 13:55
반응형

백준 1049번 기타줄 문제입니다.

자세한 문제내용은 글을 읽어보시길 바랍니다.

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

 

1049번: 기타줄

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

www.acmicpc.net

접근방법

해당 문제같은 경우 예제의 입력과 출력을 잘 보면 매우 간단하게 풀어낼 수 있는 문제입니다.

보통 이런 문제의 경우 묶음과 낱개를 함께 구매해야 한다고 생각할 수 있는데,

예제를 보면 묶음과 낱개를 따로따로 구매할 수 있습니다.

따라서 묶음 중 최소 가격, 낱개 중 최소 가격을 구한 뒤, 필요한 기타줄을 구입하기만 하면 됩니다.

코드를 보면서 어떻게 해야 하는지 알아봅시다.

 

#include<stdio.h>

int main() {
	int n, m, i, a, b, pack = 1000, solo = 1000;
	scanf("%d %d", &n, &m);
	for (i = 0; i < m; i++) {
		scanf("%d %d", &a, &b);
		if (a < pack) pack = a;
		if (b < solo) solo = b;
	}
	a = n / 6;
	b = n % 6;
	if (b * solo >= pack) {
		printf("%d", pack * a + pack);
	}
	else if (solo * 6 < pack) {
		printf("%d", n * solo);
	}
	else {
		printf("%d", a * pack + b * solo);
	}
    	return 0;
}

먼저, 끊어진 기타줄과 브랜드의 개수인 n, m을 scanf를 사용해 입력받습니다.

이후 반복문을 사용해 각 브랜드의 가격을 입력받는데, 이때 각각의 최솟값을 저장하면 됩니다.

문제에서 묶음과 낱개의 최댓값은 1000이라고 했기 때문에, 이와 비교해 더 작으면 바꿔줍니다.

 

최솟값을 구하셨다면 세 경우에 따라 각각 기타줄의 가격을 계산해주시면 됩니다.

1. 낱개로 구매하는 기타줄의 가격합이 기타줄 1묶음보다 비쌀 경우

  기타줄을 묶음으로만 구매한다.

2. 기타줄 낱개 6개가 기타줄 1묶음보다 쌀경우, 즉 기타줄 낱개 1개 < 기타줄 1묶음 / 6일 경우

  기타줄을 낱개로만 구매한다.

3. 위의 두 조건에 모두 포함되지 않을 경우

  기타줄을 묶음, 낱개 각각의 최소 가격으로 구매한다.

 

이렇게 세 가지 경우에 따라 각각 다르게 가격을 계산해주시면 해결이 가능한 문제입니다.

반응형