-
반응형
1049번: 기타줄
첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주
www.acmicpc.net
풀이)
1. 입력받은 패키지와 단품중, 최소값만 구한다.
2. {패키지,단품} 의 개수를 {0,N-6},{1,N-12},{2,N-18} , ... , {(N/6)+1,N-6*((N/6)+1)} 의 순서쌍을 탐색하며, 각 경우중 최소비용을 구하면된다.
3. (N/6)+1은 패키지를 사고, 단품이 남았을떄 패키지 가격 > 싱글*남은 단품개수 일 수 있으므로 고려해줬고, 단품의 개수는 앞의 경우와 같으면 음수가 나오므로 N-6*i와 0을 비교해서 N-6*i이 음수가 되면 0을 대입해주면 된다.
시간복잡도)
n/6+1 만큼 탐색하므로 O(N)이 된다.
코드)
#include<iostream> #include<algorithm> using namespace std; int pack=9999,single=99999; int main() { ios_base :: sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n,m; cin>>n>>m; for(int i=0;i<m;i++){ int p,s; cin>>p>>s; pack=min(pack,p); single=min(single,s); } int result=987654321; for(int i=0;i<=(n/6)+1;i++){ result=min(result,pack*i+single*max(n-6*i,0)); } cout<<result<<"\n"; return 0; }
반응형'문제풀이 > 백준oj' 카테고리의 다른 글
[백준OJ] 2467번 용액 (0) 2021.03.09 [백준OJ] 1715번 카드 정렬하기 (0) 2021.03.09 [백준oj] 10825번 국영수 (0) 2021.03.07 [백준oj] 18427번 함께 블록 쌓기 (0) 2021.03.06 [백준oj] 1600번 말이 되고픈 원숭이 (0) 2021.03.03 댓글