[백준 9664] NASLJEDSTVO (C#, C++) - soo:bak
작성일 :
문제 링크
설명
막내가 금화 T개를 N등분합니다. 각 부분은 T/N개 또는 T/N+1개가 되는데, 막내는 작은 부분을 가져갑니다.
막내가 가져간 후 남은 금화가 O개일 때, 가능한 초기 금화 수 T의 최솟값과 최댓값을 구하는 문제입니다.
접근법
먼저, 막내가 가져가는 금화 수는 T를 N으로 나눈 몫입니다. 따라서 남은 금화 O는 T에서 몫을 뺀 값입니다.
다음으로, T - T/N = O를 만족하는 T를 찾습니다. N과 O가 작으므로 T를 O부터 충분히 큰 값까지 순회하며 조건을 확인합니다.
이후, 조건을 만족하는 T 중 최솟값과 최댓값을 출력합니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
namespace Solution {
class Program {
static void Main(string[] args) {
var N = int.Parse(Console.ReadLine()!);
var O = int.Parse(Console.ReadLine()!);
var minT = int.MaxValue;
var maxT = -1;
var limit = 200000;
for (var T = O; T <= limit; T++) {
var q = T / N;
if (T - q == O) {
if (T < minT) minT = T;
if (T > maxT) maxT = T;
}
}
Console.WriteLine($"{minT} {maxT}");
}
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, O;
cin >> N >> O;
int minT = INT_MAX, maxT = -1;
const int LIMIT = 200000;
for (int T = O; T <= LIMIT; T++) {
int q = T / N;
if (T - q == O) {
minT = min(minT, T);
maxT = max(maxT, T);
}
}
cout << minT << " " << maxT << "\n";
return 0;
}