๐Ÿ™‡โ€โ™€๏ธ[Platinum V] ์นด๋“œ ๊ฒŒ์ž„ - 16566

๋ฌธ์ œ ๋งํฌ

์„ฑ๋Šฅ ์š”์•ฝ

๋ฉ”๋ชจ๋ฆฌ: 22696 KB, ์‹œ๊ฐ„: 760 ms

๋ถ„๋ฅ˜

์ด๋ถ„ ํƒ์ƒ‰, ์ž๋ฃŒ ๊ตฌ์กฐ, ๋ถ„๋ฆฌ ์ง‘ํ•ฉ

์ œ์ถœ ์ผ์ž

2024๋…„ 3์›” 10์ผ 14:56:24

๋ฌธ์ œ ์„ค๋ช…

์ฒ ์ˆ˜์™€ ๋ฏผ์ˆ˜๋Š” ์นด๋“œ ๊ฒŒ์ž„์„ ์ฆ๊ฒจํ•œ๋‹ค. ์ด ์นด๋“œ ๊ฒŒ์ž„์˜ ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. N๊ฐœ์˜ ๋นจ๊ฐ„์ƒ‰ ์นด๋“œ๊ฐ€ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์นด๋“œ๋Š” ์ˆœ์„œ๋Œ€๋กœ 1๋ถ€ํ„ฐ N๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ ธ ์žˆ๋‹ค. ์ด ์ค‘์—์„œ M๊ฐœ์˜ ์นด๋“œ๋ฅผ ๊ณ ๋ฅธ๋‹ค.
  2. N๊ฐœ์˜ ํŒŒ๋ž€์ƒ‰ ์นด๋“œ๊ฐ€ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์นด๋“œ๋Š” ์ˆœ์„œ๋Œ€๋กœ 1๋ถ€ํ„ฐ N๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ ธ ์žˆ๋‹ค. ์ด ์ค‘์—์„œ ๋นจ๊ฐ„์ƒ‰์—์„œ ๊ณ ๋ฅธ ๋ฒˆํ˜ธ์™€ ๊ฐ™์€ ํŒŒ๋ž€์ƒ‰ ์นด๋“œ M๊ฐœ๋ฅผ ๊ณ ๋ฅธ๋‹ค.
  3. ์ฒ ์ˆ˜๋Š” ๋นจ๊ฐ„์ƒ‰ ์นด๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ๋ฏผ์ˆ˜๋Š” ํŒŒ๋ž€์ƒ‰ ์นด๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค.
  4. ์ฒ ์ˆ˜์™€ ๋ฏผ์ˆ˜๋Š” ๊ณ ๋ฅธ ์นด๋“œ ์ค‘์— 1์žฅ์„ ๋’ค์ง‘์–ด์ง„ ์ƒํƒœ๋กœ ๋‚ธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์นด๋“œ๋ฅผ ๋‹ค์‹œ ๋’ค์ง‘์–ด์„œ ๋ฒˆํ˜ธ๊ฐ€ ํฐ ์‚ฌ๋žŒ์ด ์ด๊ธด๋‹ค. ์ด ๋™์ž‘์„ K๋ฒˆ ํ•ด์„œ ๋” ๋งŽ์ด ์ด๊ธด ์‚ฌ๋žŒ์ด ์ตœ์ข…์ ์œผ๋กœ ์Šน๋ฆฌํ•œ๋‹ค. ํ•œ ๋ฒˆ ๋‚ธ ์นด๋“œ๋Š” ๋ฐ˜๋“œ์‹œ ๋ฒ„๋ ค์•ผ ํ•œ๋‹ค.

์ฒ ์ˆ˜๋Š” ๋›ฐ์–ด๋‚œ ๋งˆ์ˆ ์‚ฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณธ์ธ์ด ๋‚ผ ์นด๋“œ๋ฅผ ๋งˆ์Œ๋Œ€๋กœ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ์นด๋“œ๋ฅผ ๋ฒ„๋ฆฌ๊ณ  ๋ฏผ์ˆ˜ ๋ชฐ๋ž˜ ๋‹ค์‹œ ๋“ค๊ณ  ์˜จ๋‹ค๊ฑฐ๋‚˜ ๋ฏผ์ˆ˜ํ•œํ…Œ ์—†๋Š” ์นด๋“œ๋ฅผ ๋‚ด๊ธฐ๋„ ํ•œ๋‹ค.

๋ฏผ์ˆ˜๋Š” ๋›ฐ์–ด๋‚œ ์‹ฌ๋ฆฌํ•™์ž์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฒ ์ˆ˜๊ฐ€ ๋‚ผ ์นด๋“œ๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฏผ์ˆ˜๋Š” ์ฒ ์ˆ˜๊ฐ€ ๋‚ผ ์นด๋“œ๋ณด๋‹ค ํฐ ์นด๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ ์นด๋“œ๋“ค ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์นด๋“œ๋ฅผ ๋‚ด๊ธฐ๋กœ ํ–ˆ๋‹ค.

K๋ฒˆ ๋™์•ˆ ์ฒ ์ˆ˜๊ฐ€ ๋‚ผ ์นด๋“œ๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฏผ์ˆ˜๊ฐ€ ์–ด๋–ค ์นด๋“œ๋ฅผ ๋‚ผ์ง€ ์ถœ๋ ฅํ•˜๋ผ. ๋‹จ, ๋ฏผ์ˆ˜๊ฐ€ ์นด๋“œ๋ฅผ ๋‚ด์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์„ธ ๊ฐœ์˜ ์ž์—ฐ์ˆ˜ N, M, K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค M โ‰ค N โ‰ค 4,000,000, 1 โ‰ค K โ‰ค min(M, 10,000))

๋‹ค์Œ ์ค„์— ์นด๋“œ์˜ ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” M๊ฐœ์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ๊ฐ์˜ ์ˆ˜๋“ค์€ 1 ์ด์ƒ์ด๊ณ  N ์ดํ•˜์ด๋ฉฐ ์„œ๋กœ ๋‹ค๋ฅด๋‹ค.

๋‹ค์Œ ์ค„์— K๊ฐœ์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. i๋ฒˆ์งธ ์ˆ˜๋Š” ์ฒ ์ˆ˜๊ฐ€ i๋ฒˆ์งธ๋กœ ๋‚ด๋Š” ์นด๋“œ์˜ ๋ฒˆํ˜ธ์ด๋‹ค. ์ฒ ์ˆ˜๊ฐ€ ๋‚ด๋Š” ์นด๋“œ ์—ญ์‹œ 1 ์ด์ƒ N ์ดํ•˜์ด๋‹ค.

์ถœ๋ ฅ

K์ค„์— ๊ฑธ์ณ์„œ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. i๋ฒˆ์งธ ์ค„์—๋Š” ๋ฏผ์ˆ˜๊ฐ€ i๋ฒˆ์งธ๋กœ ๋‚ผ ์นด๋“œ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•œ๋‹ค.

๐Ÿš€ํ’€์ด

์šฐ์™€ ํ”Œ๋ ˆ ๋ฌธ์  ๋ฐ ๋ฐ”๋กœ ๋งžํ˜”๋‹ค ใ…Ž

์ด๋ถ„ ํƒ์ƒ‰์„ ์ด์šฉํ•ด์„œ ํ’€์—ˆ๋Š”๋ฐ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

const int MAX = 5000000;
int n, m, k;
vector<int> cards, enemy;
bool ch[MAX];

void solve()
{
	cin >> n >> m >> k;
	cards = vector<int>(m + 1);
	enemy = vector<int>(k + 1);
    // ๋‚ด๊ฐ€ ๋“ค๊ณ ์žˆ๋Š” ์นด๋“œ๋“ค
	for (int i = 1; i <= m; ++i)
		cin >> cards[i];
    // ์ ์ด ๋‚ผ ์นด๋“œ๋“ค
	for (int i = 1; i <= k; ++i)
		cin >> enemy[i];

    // ์ด๋ถ„ ํƒ์ƒ‰์„ ์œ„ํ•œ ์ •๋ ฌ
	sort(cards.begin(), cards.end());

	for (int i = 1; i <= k; ++i)
	{
		int left = 1, right = cards.size() - 1, mid;
		while (left <= right)
		{
			mid = (left + right) / 2;

			int value = cards[mid];
			if (enemy[i] < value)
			{
				right = mid - 1;
			}
			else
			{
				left = mid + 1;
			}
		}

        // ํ•œ๋ฒˆ๋„ ๋‚ธ์ ์—†๋Š” ์นด๋“œ๋ผ๋ฉด
		if (ch[right + 1] == false)
		{
			cout << cards[right + 1] << " ";
			ch[right + 1] = true;
		}
        // ์นด๋“œ๋ฅผ ๋ƒˆ์—ˆ๋‹ค๋ฉด
		else
		{
			for (int j = right + 2; j < cards.size(); ++j)
			{
				if (ch[j] == true)
					continue;
                // ๋‚ธ์ ์—†๋Š” ์นด๋“œ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ์ฐพ๋Š”๋‹ค.
                // ๋ฌธ์ œ ์กฐ๊ฑด์—์„œ ๋‚ผ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค๊ณ  ํ–ˆ์œผ๋‹ˆ ๋ฌด์กฐ๊ฑด ์žˆ์–ด์•ผํ•จ.
				cout << cards[j] << " ";
				ch[j] = true;
				break;
			}
		}
	}
}

image

๐Ÿš€์ „์ฒด ์ฝ”๋“œ

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <math.h>

using namespace std;

// ์นด๋“œ ๊ฒŒ์ž„

//
// 10 7 5
// 2 5 3 7 8 4 9
// 4 1 1 3 8
// 
// 5 2 3 4 9
//

const int MAX = 5000000;
int n, m, k;
vector<int> cards, enemy;
bool ch[MAX];

void solve()
{
	cin >> n >> m >> k;
	cards = vector<int>(m + 1);
	enemy = vector<int>(k + 1);
	for (int i = 1; i <= m; ++i)
		cin >> cards[i];
	for (int i = 1; i <= k; ++i)
		cin >> enemy[i];

	sort(cards.begin(), cards.end());

	for (int i = 1; i <= k; ++i)
	{
		int left = 1, right = cards.size() - 1, mid;
		while (left <= right)
		{
			mid = (left + right) / 2;

			int value = cards[mid];
			if (enemy[i] < value)
			{
				right = mid - 1;
			}
			else
			{
				left = mid + 1;
			}
		}

		if (ch[right + 1] == false)
		{
			cout << cards[right + 1] << " ";
			ch[right + 1] = true;
		}
		else
		{
			for (int j = right + 2; j < cards.size(); ++j)
			{
				if (ch[j] == true)
					continue;
				cout << cards[j] << " ";
				ch[j] = true;
				break;
			}
		}
	}

}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	freopen("input.txt", "rt", stdin);

	solve();

	return 0;
}

ํƒœ๊ทธ:

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: