๐Ÿ•๏ธ ICPC Sinchon/Greedy

[BOJ][C++] 20921๋ฒˆ: ๊ทธ๋ ‡๊ณ  ๊ทธ๋Ÿฐ ์‚ฌ์ด

์„ ๋‹ฌ 2023. 1. 31. 20:03
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/20921

 

20921๋ฒˆ: ๊ทธ๋ ‡๊ณ  ๊ทธ๋Ÿฐ ์‚ฌ์ด

์ •์ˆ˜ $N$, $K$๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ($2 \leq N \leq 4\,242$, $0 \leq K \leq \frac{N(N-1)}{2}$)

www.acmicpc.net

 

๋ฌธ์ œ

์‹ ์ˆ˜๋™ ์ตœ๊ณ ์˜ ์ธ์‹ธ ํ™˜์ฃผ๋Š” ์˜ค๋Š˜๋„ ์ธ๊ธฐ๊ฐ€ ๋งŽ๋‹ค. ๊ทธ ์ธ๊ธฐ๋Š” ์ •๋ง ๋Œ€๋‹จํ•ด์„œ ๋Œ€๋‚˜๋ฌด์ˆฒ์—์„œ๋Š” ๋งค์ผ ํ™˜์ฃผ์˜ ์ด๋ฆ„์ด ์Ÿ์•„์ง„๋‹ค.

ํ™˜์ฃผ์—๊ฒŒ๋Š” ๊ทธ ์ธ๊ธฐ์˜ ๋น„๊ฒฐ์ด ์žˆ์—ˆ๋Š”๋ฐ, ๋ฐ”๋กœ ์ž์‹ ์ด ์›ํ•˜๋Š” ๋‘ ๋ช…์„ ๊ทธ๋ ‡๊ณ  ๊ทธ๋Ÿฐ ์‚ฌ์ด๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค!

ํ™˜์ฃผ๊ฐ€ ๊ทธ๋ ‡๊ณ  ๊ทธ๋Ÿฐ ์‚ฌ์ด๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • โ€Š1๋ฒˆ ์‚ฌ๋žŒ๋ถ€ํ„ฐ N๋ฒˆ ์‚ฌ๋žŒ๊นŒ์ง€ N๋ช…์„ ์ผ๋ ฌ๋กœ ์„ธ์šด๋‹ค.
  • ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ 1๋ถ€ํ„ฐ N๊นŒ์ง€ ์–‘์˜ ์ •์ˆ˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ ํžŒ ์ชฝ์ง€๋ฅผ ๋‚˜๋ˆ ์ค€๋‹ค. ์ชฝ์ง€์— ์ ํžŒ ์ •์ˆ˜๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์‚ฌ๋žŒ์„ ๊ณจ๋ž์„ ๋•Œ, ์™ผ์ชฝ์— ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ์‚ฌ๋žŒ๋ณด๋‹ค ์ชฝ์ง€์— ์ ํžŒ ์ •์ˆ˜๊ฐ€ ๋” ํฌ๋‹ค๋ฉด, ์ด ๋‘ ์‚ฌ๋žŒ์€ ๊ทธ๋ ‡๊ณ  ๊ทธ๋Ÿฐ ์‚ฌ์ด๊ฐ€ ๋œ๋‹ค.
  • ๋†€๋ž๊ฒŒ๋„ ํ•œ ์‚ฌ๋žŒ์ด ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๊ณผ ๊ทธ๋ ‡๊ณ  ๊ทธ๋Ÿฐ ์‚ฌ์ด์ผ ์ˆ˜๋„ ์žˆ๋‹ค.

21์„ธ๊ธฐ์˜ ํํ”ผ๋“œ ํ™˜์ฃผ๋Š” ์ธ๊ณผ ์—ฐ์•  ์ƒ๋‹ด์ด ๋„ˆ๋ฌด ๋งŽ์ด ์™€์„œ ํž˜๋“ค๋‹ค. ๊ทธ๋ž˜์„œ ํ™˜์ฃผ๋Š” ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ทธ๋ ‡๊ณ  ๊ทธ๋Ÿฐ ์‚ฌ์ด๋ฅผ ๋งŒ๋“ค๋ ค ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋„ˆ๋ฌด ๋งŽ์ด ๋งŒ๋“ค๋ฉด ๋ฏธํ’์–‘์†์— ์ €ํ•ด๋˜๊ณ , ๋„ˆ๋ฌด ์ ๊ฒŒ ๋งŒ๋“ค๋ฉด ์†”๋กœ๋“ค์ด ๋งŽ์•„์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์ •ํ™•ํžˆ K๊ฐœ์˜ ๊ทธ๋ ‡๊ณ  ๊ทธ๋Ÿฐ ์‚ฌ์ด๋ฅผ ๋งŒ๋“ค๋ ค ํ•œ๋‹ค. 

ํ™˜์ฃผ๋Š” ์ € ๋ฉ€๋ฆฌ์„œ ๋‹ฌ๋ ค์˜ค๋Š” N๋ช…์˜ ์นœ๊ตฌ๋“ค์„ ๋ณด์•˜๋‹ค. ์žฌ๋นจ๋ฆฌ K๊ฐœ์˜ ๊ทธ๋ ‡๊ณ  ๊ทธ๋Ÿฐ ์‚ฌ์ด๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์ง€ ์•Š์œผ๋ฉด, ์ €๋“ค์€ ํ™˜์ฃผ์˜ ์•ˆํ‹ฐํŒฌ์ด ๋ ์ง€๋„ ๋ชจ๋ฅธ๋‹ค!

์ž…๋ ฅ

์ •์ˆ˜ N, K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (2≤N≤4242, 0≤K≤N(N−1)2)

์ถœ๋ ฅ

โ€ŠN๊ฐœ์˜ ์ •์ˆ˜ v1,v2,โ‹ฏ,vN์„ ๊ณต๋ฐฑ ๋‹จ์œ„๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

โ€Švi๋Š” i๋ฒˆ์งธ ์‚ฌ๋žŒ์ด ๋ฐ›์€ ์ชฝ์ง€์— ์ ํžŒ ์ •์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๊ณ , ์ •ํ™•ํžˆ K๊ฐœ์˜ ๊ทธ๋ ‡๊ณ  ๊ทธ๋Ÿฐ ์‚ฌ์ด๊ฐ€ ๋งŒ๋“ค์–ด์ ธ์•ผ ํ•œ๋‹ค.

์ •ํ™•ํžˆ K๊ฐœ์˜ ๊ทธ๋ ‡๊ณ  ๊ทธ๋Ÿฐ ์‚ฌ์ด๋ฅผ ๋งŒ๋“ค ๋ฐฉ๋ฒ•์€ ํ•ญ์ƒ ์กด์žฌํ•˜๊ณ , ๋งŒ์•ฝ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด ๊ทธ์ค‘ ํ•˜๋‚˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

// Authored by : seondal
// Co-authored by : -

// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL);

    int n, k;
    cin >> n >> k;
    
    vector<int> v;
    vector<int> replace;
    for(int i=1; i<=n; i++)
        v.push_back(i);
    for(int i=n-1; i>0; i--) {
        if(k>=i) {
            k -= i;
            v[i] = -1;
            replace.push_back(i+1);
        }
    }
    
    for(int i=0; i<replace.size(); i++)
        cout << replace[i] << " ";
    for(int i=0; i<n; i++)
        if(v[i] != -1)
            cout << v[i] << " ";
    
    return 0;
}

/*
 */
๋ฐ˜์‘ํ˜•