[BOJ] 백준_1049번_기타줄_C/C++백준 알고리즘2022. 1. 19. 23:04
목차
문제 출처
https://www.acmicpc.net/problem/1049
문제 설명
코드
//[BOJ] 1049번 기타줄
#include <iostream>
using namespace std;
int main()
{
int n, m, sum=0;
cin >> n >> m;
int** brand = new int*[m];
int pmin = 1001, imin = 1001;
for (int i = 0; i < m; i++)
{
brand[i] = new int[2];
cin >> brand[i][0] >> brand[i][1];
if (brand[i][0] < pmin)
pmin = brand[i][0];
if(brand[i][1]<imin)
imin = brand[i][1];
}
while (n >= 6)
{
if (pmin < 6 * imin)
sum += pmin;
else
sum += 6 * imin;
n -= 6;
}
if (pmin < n * imin)
sum += pmin;
else
sum += n * imin;
cout << sum;
return 0;
}
풀이 과정
차례로 사야 할 기타줄의 갯수와 브랜드 갯수(n, m)를 입력 받은 후 패키지 가격과 낱개 가격을 각각 담을 brand 정수형 2차원 배열을 동적으로 m행을 선언해준 뒤 두 가지 값만 받으면 되므로 2의 크기만큼 m번 반복해서 선언하면서 brand[i][0], brand[i][1]을 각각 입력받아준다. 이 때 미리 선언해준 패키지 가격 중 최솟값(pmin), 낱개 가격 중 최솟값(imin)을 brand[i][0], brand[i][1]와 각각 비교해가면서 더 작은 값을 pmin, imin에 저장하도록 한다. 최솟값 찾는 과정에서 시간이 오래걸릴 수 있으므로 이 부분은 반복문이 끝나고 sort함수를 사용해도 좋을 것이다. 이후 패키지로 구매하는 것이 낱개로 6개 구매하는 것 보다 저렴한 경우에는 총 가격(sum)에 패키지 가격을 더하고, 그렇지 않을 경우 [낱개 가격x6]을 더해주는 과정을 구매해야 하는 기타줄의 갯수 n이 6보다 크거나 같을 경우에 반복되는 루프를 만들어주고 이 while루프에서는 한 단계마다 무조건 기타줄 6개는 구매하므로 마지막에 n을 6 감소되게 한다. n이 6 미만으로 남았을 경우 생각해야할 경우는 두 가지다. 6개보다 적게 남아도 패키지로 사는 게 더 저렴한 경우도 있을 수 있기 때문에 패키지 가격이 [남은 기타줄 갯수x낱개 가격]보다 저렴한 경우 총 가격에 패키지 가격을 더하고 그렇지 않을 경우 n*imin을 더한다. 해당 과정이 끝나면 sum에 최소 구매 가격이 저장된다.
728x90
반응형
LIST
'백준 알고리즘' 카테고리의 다른 글
[BOJ] 백준_22864번_피로도(재채점)_C/C++ (0) | 2022.01.22 |
---|---|
[BOJ] 백준_11000번_강의실 배정_C/C++ (0) | 2022.01.21 |
[BOJ] 백준_2864번_5와 6의 차이_C/C++ (0) | 2022.01.12 |
[BOJ] 백준_2217번_로프_C/C++ (0) | 2022.01.10 |
[BOJ] 백준_1026번_보물_C/C++ (0) | 2022.01.08 |
@kdj :: Childev'note
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!