백준 23972번 악마의 제안 C#으로 문제 풀어보기
안녕하세요 저는 박민성입니다.
오늘은 백준 23972번 악마의 제안을 풀어 보겠습니다.

문제를 보면
입력은 악마가 원하는 금액 1보다 크거나 같은 K와 몇 배로 돌려줄지 200,000,000보다 작거나 같은 N이 주어집니다.
출력은 손해를 보지 않기 위한 최소 금액 X를 출력해야 합니다.

일단 수가 크니 자료형을 long으로 공백을 기준으로 나눠서 변수를 선언해 줍니다.
그리고 출력 조건중 항상 민주가 손해를 보게 된다면 -1 출력이 돼야 하는데 항상 손해를 볼 때는 배수가 1일 때라고 생각했습니다.
저는 문제의 예제들을 보면서 저기 입력 2개를 어떤 수식을 사용해야지 출력이 나올까 생각했습니다.
여러 가지의 시도를 해보았습니다 a += a / (b - 1); 을 하면 되지 않을까?라고 생각해 보았지만 오류가 있었습니다.
그래서 이것저것 해보다가 a * b / (b - 1) 이런 수식에 도착했습니다.

이렇게 코드를 작성하였습니다.
하지만 이 코드에는 오류가 있습니다.
만약 나눌 때 나누어 떨어지지 않는다면 분명 문제가 생길 것입니다.
지금 코드는 예제 입력과 예제 출력을 2개 동시에 충족하지만 5 3이나 6 4 같은 입력은 제대로 처리를 못합니다.
그렇기 때문에 저는 정수 나눗셈에서 올림(ceil) 방법을 사용할 겁니다.
C#은 나눗셈을 할 때 정수 int는 소수점을 버리기 때문에 올림 ceil 방법을 사용해야 합니다.
방식을 적용하여 코드를 쓴다면

나눗셈을 하기 전에 소수점을 버리는 걸 이용하여 ceil 방식을 이용해 수를 더해줍니다.

이것이 전체 코드입니다.
이렇게 백준에 제출하였더니

정답이었습니다.
이 문제는 브론즈 2이지만 저는 이 방법을 생각하기까지 많은 시간이 걸렸습니다.