작성일 :

문제 링크

24366번 - КЛЕТКИ

설명

한 줄에 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;
}