[백준 24366] КЛЕТКИ (C#, C++) - soo:bak
작성일 :
문제 링크
설명
한 줄에 N개의 칸이 있고, K마리 비둘기를 서로 다른 칸에 놓습니다.
인접한 두 비둘기 사이의 최소 거리가 최대가 되도록 배치할 때, 그 최소 거리를 갖는 비둘기 쌍의 개수를 구하는 문제입니다.
접근법
먼저, 빈 칸 N-K개를 K-1개의 간격에 나누는 문제로 생각합니다. 최소 거리를 최대화하려면 빈 칸을 가능한 균등하게 분배해야 합니다.
다음으로, 빈 칸을 간격 수로 나눈 나머지만큼의 간격은 길이가 1 더 깁니다. 나머지 간격들은 기본 길이를 가지며, 이 기본 길이가 최소 거리가 됩니다.
이후, 최소 거리를 갖는 쌍의 개수는 간격 수에서 나머지를 뺀 값입니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
namespace Solution {
class Program {
static void Main(string[] args) {
var parts = Console.ReadLine()!.Split();
var N = int.Parse(parts[0]);
var K = int.Parse(parts[1]);
var G = K - 1;
var E = N - K;
var r = E % G;
var ans = G - r;
Console.WriteLine(ans);
}
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, K; cin >> N >> K;
int G = K - 1;
int E = N - K;
int r = E % G;
int ans = G - r;
cout << ans << "\n";
return 0;
}