본문 바로가기

백준

1712 손익분기점

전에 달팽이 나무 타는 문제를 풀었는데 그때도 이런 식으로 해결했다. 부등식을 세우고 마지막에는 올림해서 n 구하기

아 그런데 문제를 잘못 읽었다. 총 수입이 총 비용보다 많아져야 하므로 같으면 안 된다. 그래서 floor(A / (C - B)) + 1을 해줘야 올바른 식이 된다. 

 

#include <iostream>
#include <cmath>

using namespace std;

int main() {
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);
    
    printf("%d", (int)floor((double)a / (double)(c-b)) + 1);
}

아 그런데 틀렸다! 다시 확인해봐야겠다. 머리 안 돌아가서 밥 먹고 다시 해야지 

 

밥 먹고 다시 돌아왔다

몰랐는데 손익 분기점이 존재하지 않는 경우도 생각해야해서 이것도 고려했다.

분모가 0이 되면 안 되니 c == b일때를 제외했다. 그리고 기존에는 floor를 써서 풀었는데 실수가 나오면 안 좋다고 해서 그냥 몫으로 계산했다. 생각해보니 실수는 부동소숫점 때문에 값이 미묘해진다는걸 들은 적이 있다. 

 

코드는 이렇게 작성했다.

 

근데 또 틀렸다! 이제는 진짜 이유를 모르겠어서 그냥 물어봤다. 

 

#include <iostream>

int main() {
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);
    if(c <= b)
        printf("-1");
    else{
        printf("%d", a / (c - b) + 1);
    }
}

 

몰랐는데 c < b인 경우도 손익 분기점이 없다!! c가 가격이고 b가 비용인데 비용이 더 비싸면 안되기도 하고, 게다가 계산 결과가 음수가 된다! 이런 것도 고려해야한다니 신기하다. 알고리즘 문제가 아니라 그냥 고등학교 시험에 나오는 문제같다.. 

 

 

그래서 맞췄다! 

 

문제 처음 틀리고 어디서 틀렸는지 고민해봤는데 나는 일차함수 조건만 생각했다. 그 두 일차함수가 있을 때 한 점에서 만나는지 / 일치하는지 / 평행하는지 이 세개밖에 안 떠올랐다. 그래서 c == b 말고는 한점에서 만나겠지 생각했는데 이런 것도 고려해야 한다니. 앞으로는 더 나아가서 c>b, c==b, c<b 까지 생각하도록 해야겠다. 

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

2480 주사위 세 개  (0) 2019.09.30
2530 인공지능 시계  (0) 2019.09.30
1212 8진수 2진수  (0) 2019.09.29
10039 평균점수  (0) 2019.09.29
8393 합  (0) 2019.09.29