๐Ÿ™‡โ€โ™€๏ธ[Gold V] ๋ฆฌ๋ชจ์ปจ - 1107

๋ฌธ์ œ ๋งํฌ

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

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

๋ถ„๋ฅ˜

๋ธŒ๋ฃจํŠธํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ œ์ถœ ์ผ์ž

2024๋…„ 1์›” 18์ผ 15:38:06

๋ฌธ์ œ ์„ค๋ช…

์ˆ˜๋นˆ์ด๋Š” TV๋ฅผ ๋ณด๊ณ  ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ์ฑ„๋„์„ ๋Œ๋ฆฌ๋ ค๊ณ  ํ–ˆ์ง€๋งŒ, ๋ฒ„ํŠผ์„ ๋„ˆ๋ฌด ์„ธ๊ฒŒ ๋ˆ„๋ฅด๋Š” ๋ฐ”๋žŒ์—, ์ผ๋ถ€ ์ˆซ์ž ๋ฒ„ํŠผ์ด ๊ณ ์žฅ๋‚ฌ๋‹ค.

๋ฆฌ๋ชจ์ปจ์—๋Š” ๋ฒ„ํŠผ์ด 0๋ถ€ํ„ฐ 9๊นŒ์ง€ ์ˆซ์ž, +์™€ -๊ฐ€ ์žˆ๋‹ค. +๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ˜„์žฌ ๋ณด๊ณ ์žˆ๋Š” ์ฑ„๋„์—์„œ +1๋œ ์ฑ„๋„๋กœ ์ด๋™ํ•˜๊ณ , -๋ฅผ ๋ˆ„๋ฅด๋ฉด -1๋œ ์ฑ„๋„๋กœ ์ด๋™ํ•œ๋‹ค. ์ฑ„๋„ 0์—์„œ -๋ฅผ ๋ˆ„๋ฅธ ๊ฒฝ์šฐ์—๋Š” ์ฑ„๋„์ด ๋ณ€ํ•˜์ง€ ์•Š๊ณ , ์ฑ„๋„์€ ๋ฌดํ•œ๋Œ€ ๋งŒํผ ์žˆ๋‹ค.

์ˆ˜๋นˆ์ด๊ฐ€ ์ง€๊ธˆ ์ด๋™ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์ฑ„๋„์€ N์ด๋‹ค. ์–ด๋–ค ๋ฒ„ํŠผ์ด ๊ณ ์žฅ๋‚ฌ๋Š”์ง€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ฑ„๋„ N์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฒ„ํŠผ์„ ์ตœ์†Œ ๋ช‡ ๋ฒˆ ๋ˆŒ๋Ÿฌ์•ผํ•˜๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ˆ˜๋นˆ์ด๊ฐ€ ์ง€๊ธˆ ๋ณด๊ณ  ์žˆ๋Š” ์ฑ„๋„์€ 100๋ฒˆ์ด๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ˆ˜๋นˆ์ด๊ฐ€ ์ด๋™ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์ฑ„๋„ N (0 โ‰ค N โ‰ค 500,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์˜ ๊ฐœ์ˆ˜ M (0 โ‰ค M โ‰ค 10)์ด ์ฃผ์–ด์ง„๋‹ค. ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์…‹์งธ ์ค„์—๋Š” ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์ด ์ฃผ์–ด์ง€๋ฉฐ, ๊ฐ™์€ ๋ฒ„ํŠผ์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์ฃผ์–ด์ง€๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ฑ„๋„ N์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด ๋ฒ„ํŠผ์„ ์ตœ์†Œ ๋ช‡ ๋ฒˆ ๋ˆŒ๋Ÿฌ์•ผ ํ•˜๋Š”์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿš€ํ’€์ด

์™„์ „ ํƒ์ƒ‰ ๋ฌธ์ œ๋กœ ๋‚˜๋Š” DFS๋ฅผ ์ด์šฉํ–ˆ๋‹ค.

์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ์ค‘์š”ํ•œ ๋ฌธ์ œ์˜€๋Š”๋ฐ ํŠนํžˆ ํ•œ์ž๋ฆฌ ์ˆซ์ž์ธ 0์ผ๋•Œ ์ž˜ ์ฒ˜๋ฆฌํ–ˆ์–ด์•ผํ–ˆ๋‹ค.

๋Œ€๋žต์ ์ธ ํ‹€์€ ๊ธˆ๋ฐฉ ์žก๊ณ  ํ’€์—ˆ๋Š”๋ฐ ๋ฐ˜๋ก€๊ฐ€ ๋งŽ์•„์„œ ๊ณ„์† ํ‹€๋ ธ๋‹ค.

DFS๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์งฐ๋‹ค.

void DFS(int L, int ret)
{
	if (L > digit + 1)
		return;

	if (L == digit || L == digit - 1 || L == digit + 1)
	{
		if (L != 0)
		{
			int dis = abs(ret - num);
			int temp = dis + L;
			//cout << "ret : " << ret << endl;
			res = min(res, temp);
			//cout << "res : " << res << endl;

            // ์›ํ•˜๋Š” ์ˆซ์ž๊ฐ€ 0์ผ๋•Œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ
			if (digit == 1 && ret == 0 && num == 0)
				res = 1;
		}
	}


	for (int i = 0; i <= 9; ++i)
	{
		bool flag = true;
		for (int j = 0; j < broken.size(); ++j)
		{
			if (i == broken[j])
			{
				flag = false;
				break;
			}
		}

		if (flag == true)
		{
			DFS(L + 1, ret * 10 + i);
		}
	}
}

๊ณ ์žฅ๋‚œ ์ˆซ์ž๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋“  ๋ฒˆํ˜ธ๋ฅผ ๋ˆŒ๋Ÿฌ๋ดค๋‹ค.

์ค‘์š”ํ•œ ์ ์€ ์›ํ•˜๋Š” ์ˆซ์ž์˜ ์ž๋ฆฟ์ˆ˜๊นŒ์ง€ ๋ˆ„๋ฅด๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๊ทธ์ „, ๊ทธํ›„ ๊นŒ์ง€ ์ƒ๊ฐํ•ด์„œ ๊ฒฝ์šฐ๋ฅผ ๋‹ค ์ƒ๊ฐํ•ด์•ผํ•œ๋‹ค.

๋˜ํ•œ +,-๋กœ๋งŒ ์›ํ•˜๋Š” ์ˆซ์ž๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋” ์งง์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ DFS๊ฐ€ ๋๋‚˜๊ณ  ๋งˆ์ง€๋ง‰์— ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•ด์„œ ์ตœ์†Œ๊ฐ’์„ ๊ตฌํ•ด์•ผํ•œ๋‹ค.

๋ฆฌ๋ชจ์ปจ ๋ฟŒ์…”๋ฒ„๋ฆฌ๊ณ  ์‹ถ๋‹ค

๊ฒจ์šฐ ํ’€์—ˆ๋‹คโ€ฆ

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

#define _CRT_SECURE_NO_WARNINGS

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

using namespace std;

int num, n, digit = 0, cur = 100, res = 123456789;
vector<int> broken;
void setting()
{
	cin >> num >> n;
	broken = vector<int>(n);
	for (int i = 0; i < n; ++i)
	{
		cin >> broken[i];
	}

	int temp = num;
	while (temp > 0)
	{
		digit++;
		temp /= 10;
	}

	if (num == 0)
		digit = 1;
}

void DFS(int L, int ret)
{
	if (L > digit + 1)
		return;

	if (L == digit || L == digit - 1 || L == digit + 1)
	{
		if (L != 0)
		{
			int dis = abs(ret - num);
			int temp = dis + L;
			//cout << "ret : " << ret << endl;
			res = min(res, temp);
			//cout << "res : " << res << endl;

			if (digit == 1 && ret == 0 && num == 0)
				res = 1;
		}
	}


	for (int i = 0; i <= 9; ++i)
	{
		bool flag = true;
		for (int j = 0; j < broken.size(); ++j)
		{
			if (i == broken[j])
			{
				flag = false;
				break;
			}
		}

		if (flag == true)
		{
			DFS(L + 1, ret * 10 + i);
		}
	}
}

void solve()
{
	DFS(0, 0);

	int temp = abs(num - cur);
	res = min(res, temp);

	cout << res;
}

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

	setting();
	solve();

	return 0;
}

ํƒœ๊ทธ:

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

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