반응형
https://www.acmicpc.net/problem/1712
우선 틀린 코드부터
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int A, B, C, result, i = 0;
scanf("%d%d%d", &A, &B, &C);
while (1)
{
if (B >= C) { printf("-1"); break; }
if (A + (B * i) - (C * i) < 0) { printf("%d", i); break; }
i++;
}
return 0;
}
마지막 예제 입력에서 눈치채긴 했으나 반복문을 이용하다보니 시간초과가 일어났다.
반복문을 안쓰라고 풀라고? 가능한가?
단계별로 풀어보기의 theme이 기본 수학이 아니었다면 풀지 못했을 것이다.
고정비용 = A 가변비용 = B 재화의 가격 = C
손익분기점을 구하려면
A + Bx - Cx(x는 재화의 개수)라는 식이 0보다 작아졌을 때의 x의 값을 구해야한다.
결국 구하려는 것은 x의 값이다.
따라서 x로 정리해보았을 때x < A/(C-B)라는 식이 도출된다.
도출되는 건 좋은데 반복문돌려야하나?
곰곰히 고민해보니 부등식을 등식으로 바꿀 수 있었다.
X = A / (C - B);
X += 1;
더 자세한 설명은 하지 않겠다.
만~약 정답을 위해 보시는 분이 계시다면 보며 이해하려는 것 보다 직접 식을 한 번 세워보심이 더 이해가 빠를 것이다!
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int A, B, C, X = 0;
scanf("%d%d%d", &A, &B, &C);
if (B >= C)printf("-1");
else {
X = A / (C - B);
printf("%d", X + 1);
}
return 0;
}
B가 C보다 같거나 크다면 이익으로 넘어가지 않는다.
☞다른 사람의 코드
#include <stdio.h>
int main() {
int A, B, C;
scanf("%d %d %d", &A, &B, &C);
int x = 1;
if (B >= C) {
printf("-1");
}
else// C>B 인 경우
{
x = A / (C - B);
printf("%d", (int)x + 1);
}
return 0;
}
'/'연산의 경우 항상 자료형을 고려할 것
해이함에 경각심을 주는 코드였다.
사실 정말로 분류가 '기본 수학'이 아니었다면 나는 풀지 못했을 것이다.
반복문이 떠올랐다고 반복문만을 사용할 것인가?
코드를 더 간결하게 작성할 수 없을까?
이 문제를 풀었음에도 그에 대한 자신감이 상승하지 않는다.
더 열심히 하자.
반응형
'Baekjoon' 카테고리의 다른 글
[C] 백준 1193번 : 분수찾기 (0) | 2023.01.19 |
---|---|
[C] 백준 2292번 : 벌집 (0) | 2023.01.18 |
[C] 백준 2675번 : 문자열 반복 (0) | 2023.01.15 |
[C] 백준 10809번 : 알파벳 찾기 (0) | 2023.01.15 |
[C] 백준 11720번 : 숫자의 합 (0) | 2023.01.14 |