참고: https://www.acmicpc.net/problem/1712
✔️ 문제
문제는 다음과 같다.
✔️ 풀이
예제를 보고 다음과 같이 이해할 수 있다.
고정비용 1000만원에 가변비용 70만원이 있고,
해당 두 비용을 통해 생산된 노트북이 판매 단가로 170만원일때
1000+(70x노트북수) < 170x노트북수 공식에서
판매 단가가 생산 단가를 넘어서는 지점을 손익분기점이라고 한다.
예를 들어 예제 1을 보게 되어 노트북 10개를 생산하는 지점이
1000+(70x10) == 170x10 이라는 값이 나오게 되는데,
그 다음 1770 < 1840 가격 즉, 판매 단가가 생산 단가를 넘어서는
노트북 11개를 생산하는 지점이 손익분기점이고
해당 11이라는 숫자를 출력하면 되는 것이다.
예제 2를 보게 되면 3+(2xn) < 1xn 이라는 공식에서
판매 단가가 생산 단가를 죽어도 넘어서지 못하는
손익분기점이 없는 상황에서는 -1을 출력하면 된다.
해당 문제는 시간 제한이 0.35초이고,
A, B, C는 21억 이하의 자연수이기 때문에
높은 수에서는 시간 제한에 걸릴 가능성이 크다.
from sys import stdin as ss
a,b,c=map(int,ss.readline().split())
n=1
if b+1==c: print(a+1)
elif b>c: print(-1)
else:
while a+b*n > c*n: n+=1
print(n+1)
초기에 제출한 코드는 다음과 같은데,
반복문을 통해서 생산량을 n으로 하여 계속해서 1을
더해준뒤 출력을 하게 되면 시간이 오래 걸리는
반복 작업이기 때문에 다음과 같은 결과를 볼 수 있다.
그렇다면 반복문을 사용하지 않고도
충분히 문제를 풀 수 있다는 소리가 되고,
해당 풀이는 간단한 공식으로도 풀 수 있었다.
from sys import stdin as ss
a,b,c=map(int,ss.readline().split())
if b>=c: print(-1)
else: print((a//(c-b))+1)
생산 단가에서 가변 비용을 뺀 값을
고정 비용으로 나눈 몫에 1을 더하면
손익분기점을 구할 수 있다는 공식이
머릿 속에서 나왔다는 것이 너무 기뻤다..
제출하고나서 해당 코드를 줄일 수 있는 부분을
발견하게 되었고 최종 코드는 다음과 같다.
from sys import stdin as ss
a,b,c=map(int,ss.readline().split())
print(-1 if b>=c else (a//(c-b))+1)
화이팅 💪
'알고리즘(algo) > 백준' 카테고리의 다른 글
[백준] 10250번 - ACM 호텔 (0) | 2023.01.23 |
---|---|
[백준] 2292번 - 벌집 (0) | 2023.01.22 |
[백준] 2563번 - 색종이 (0) | 2023.01.21 |
[백준] 2566번 - 최댓값 (0) | 2023.01.21 |
[백준] 2577번 - 숫자의 개수 (0) | 2023.01.20 |