작성일 :

문제 링크

16239번 - Nadan

설명

총 K 쿠나를 N개 프로젝트에 나눠줍니다. 모든 프로젝트는 양의 정수 금액을 받아야 하며, 서로 다른 금액을 받아야 합니다.

항상 해가 존재한다고 보장되므로, 한 가지 가능한 배분을 출력하는 문제입니다.


접근법

먼저, 가장 간단한 서로 다른 양의 정수 집합은 1, 2, 3, …, N-1입니다.

다음으로, 이들의 합은 N*(N-1)/2이므로 남은 금액을 마지막 프로젝트에 몰아주면 모든 금액이 서로 달라집니다.

이후, 보장 조건에 의해 남은 금액도 양수가 됩니다. N이 1이면 전부 K를 줍니다.



Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;

namespace Solution {
  class Program {
    static void Main(string[] args) {
      var K = int.Parse(Console.ReadLine()!);
      var N = int.Parse(Console.ReadLine()!);

      if (N == 1) {
        Console.WriteLine(K);
        return;
      }

      for (var i = 1; i < N; i++)
        Console.WriteLine(i);

      var remaining = K - (N * (N - 1) / 2);
      Console.WriteLine(remaining);
    }
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int K, N; cin >> K >> N;

  if (N == 1) {
    cout << K << "\n";
    return 0;
  }

  for (int i = 1; i < N; i++)
    cout << i << "\n";

  int remaining = K - (N * (N - 1) / 2);
  cout << remaining << "\n";

  return 0;
}