https://www.acmicpc.net/problem/23972
문제
어느 날, 민주는 꿈에서 악마를 만나게 되었다. 악마는 자신에게 K원을 지불하면, 지불하고 남은 금액을 N배로 만들어준다고 한다.
민주는 자신이 최소 몇 원을 가지고 있어야 악마에게 K원을 지불했을 때 손해를 보지 않는지 알고 싶다.
악마가 제안한 K와 N이 주어졌을 때, 민주가 손해 보지 않기 위해 가지고 있어야 하는 최소 금액 X를 구해주자. 단, 금액은 정수여야 한다.
입력
첫째 줄에 악마가 제안한 정수 K와 N이 공백을 사이에 두고 주어진다. (1 ≤ K, N ≤ 200,000,000)
출력
민주가 손해 보지 않기 위해 가지고 있어야 하는 최소 금액 X를 출력한다.
항상 민주가 손해를 보게 된다면 -1을 출력한다.
코드
K, N = map(int, input().split())
if N == 1:
print(-1)
else:
a = (K*N) // (N-1)
if(K*N) % (N-1):
a += 1
print(a)
풀이
만약 현재 민주가 가지고 있는 금액이 X 라면,
악마에게 지불하고 남은 금액이 (X - K)원이 되고 되돌려받을 금액이 N(X-K)원이 된다.
여기서 민주가 손해를 보지 않기위해서는 되돌려받을 금액인 N(X-K)원이 적어도 원래 가지고 있던 금액인 X보다 크거나 같아야하므로
X >= N(X-K) 이란 식이 성립되어 X >= N*K / (N-1) 으로 원하는 답을 구할 수 있게 된다.
이때 N=1이 되면 무조건 손해를 보기때문에 N=1일때 -1이 출력되게 한다.
그리고 금액은 정수라는 조건이 붙어있기때문에, 나머지가 존재할 경우 1을 더해준다
'Koala - 8기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[C++] 백준 2828번: 사과 담기 게임 (0) | 2022.10.02 |
---|---|
[백준/Python] 1371번 가장 많은 글자 (0) | 2022.10.02 |
[백준/Python]3181번 줄임말 만들기 (0) | 2022.09.25 |
[C++] 백준 7785번: 회사에 있는 사람 (2) | 2022.09.25 |
[백준/python] 14724번 관리자는 누구? (2) | 2022.09.25 |