새소식

💻 Programming (프로그래밍)/C++ | 백준

[C++][백준] - 악마의 제안 (23972번)

  • -
https://www.acmicpc.net/problem/23972
 

23972번: 악마의 제안

첫째 줄에 악마가 제안한 정수 K와 N이 공백을 사이에 두고 주어진다. (1 ≤ K, N ≤ 200,000,000)

www.acmicpc.net

🔔 문제 : 

(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));
	}	
}

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.