https://www.acmicpc.net/problem/23972
🔔 문제 :
(1<= K,N <= 200,000,000) 인 K원을 지불하면 지불하고 남은 금액을 N배를 만들어 준다고 합니다.
최소 몇 원을 가지고 있어야지 손해를 보지 않는지 알아내는 문제입니다.
입력값으로는 K, N이 주어집니다.
항상 손해를 보게 된다면 -1 출력
손해를 안본다면 최소 금액 X를 출력합니다.
🔔 Kick Point :
(X-K)*N >= X 인 방정식 조건을 풀어 보면
X*N - K*N >= X
(N-1)X >= K*N
X >= (K*N)/(N-1)
즉 (K*N) / (N-1)일 보다 큰 정수의 X값을 구하는 문제입니다.
여기서 (K*N) / (N-1) 값이 소수점이 있는 경우 +1을 해주면 정수값이 되고,
(K*N) / (N-1) 소수점이 없는 경우는 그냥 그 값 그대로 해주면 됩니다.
이거를 (k*n)%(n-1)으로 판별 할 수 있었습니다.
참고로 꼭 삼항조건식을 사용할 때, () 괄호로 묶어줘야지 오류가 안나고 잘 사용됩니다!
🔔 Code :
#include <iostream>
using namespace std;
int main() {
long long k, n;
cin >> k >> n;
if (n == 1) cout << -1;
else {
cout << ((k * n) % (n - 1) ? k * n / (n - 1) + 1 : k * n / (n - 1));
}
}