본문 바로가기

백준

1049 기타줄

n : 끊어진 기타줄의 개수

M : 브랜드 

6개 세트와 낱개로 사는 두가지 경우가 있다. 

 

각 브랜드 별 돈의 가격을 구한 후 그 중에서 최솟값을 구하면 될거라 생각했다. 

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    vector <int> money(m*2);
    
    for(int i = 0; i < m*2; i=i+2){
        scanf("%d %d", &money[i], &money[i+1]);
        money[i+1] *= n;
    }
    printf("%d", *min_element(money.begin(), money.end()));
    
    return 0;
}

처음 짠 코드는 위와 같다. 먼저 돈을 입력받을 벡터를 만들고 입력을 받는다. 

i+1은 낱개로 구매하는 가격이므로 n개를 곱해준다. 

다음으로 money 배열의 최솟값을 출력해준다. 그럼 끝!

 

하지만 틀렸다..

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    vector <int> money(m*2);
    
    for(int i = 0; i < m*2; i=i+2){
        scanf("%d %d", &money[i], &money[i+1]);
        money[i] *= (n+5)/6;
        money[i+1] *= n;
    }
    printf("%d", *min_element(money.begin(), money.end()));
    
    return 0;
}

어디서 틀렸을까 생각해봤는데 만약 13개를 사려고 하면 패키지 두개를 사야한다. 그런데 나는 패키지 하나의 가격만 구했다. 그래서 개수에 따라 최대 패키지 개수를 맞춰서 구해줬다. 6개면 1개 7개는 2개.. 올림이라서 전에 배운 공식 써줬음

 

또 틀렸다ㅎㅎ 블로그 적으면서 어디서 틀렸는지 감이 왔는데 7개면 패키지 두개가 아니라 패키지 1개에 낱개 1개를 사도 되지 않을까??

 

전에 풀었던 반반치킨문제랑 비슷한 것 같다. 다른 점이 있다면 그때는 양념/반반/후라이드 세가지 경우여서 값을 따지기가 어려웠는데 지금은 패키지/낱개 두가지 경우밖에 없다. 그래서 만약 낱개가 싸면 전부 낱개로 사고 패키지가 싸면 전부 패키지로 사는데 이때, 패키지를 최대로 살지 아니면 패키지 + 낱개로 살지 구하면 되겠다. 

 

정리를 하면 이렇다.

1. 전부 낱개로 사는 경우 (낱개가 가장 쌀 때)

2. 전부 패키지로 사는 졍우 (패키지가 가장 쌀 때)

3. 패키지로 사고 남은 건 낱개로 사는 경우 (패키지가 가장 쌀 때)

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    vector <int> money(m*2);
    
    for(int i = 0; i < m*2; i=i+2){
        scanf("%d %d", &money[i], &money[i+1]);
        money[i] = min(money[i]*(n+5)/6, money[i]*(n/6 + n%6*money[i+1]));
        money[i+1] *= n;
    }
    for(int i = 0; i < m*2; i=i+2)
        printf("%d %d ", money[i], money[i+1]);
    printf("%d", *min_element(money.begin(), money.end()));
    
    return 0;
}

 

ㅎㅎ 틀렸다. 밥 먹고 다시 와야겠다. 

'백준' 카테고리의 다른 글

3613 Java vs C++  (0) 2019.11.02
11383 뚊  (0) 2019.11.02
10867 중복 빼고 정렬하기  (0) 2019.11.01
10989 수 정렬하기 3  (0) 2019.11.01
1252 이진수 덧셈  (0) 2019.10.27