๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm

[Algorithm] ๋ฆฌ๋ชจ์ปจ (๋ฐฑ์ค€ - 1107)

๐Ÿ“‹ ๋ฌธ์ œ

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

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

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

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

์ž…๋ ฅ

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

์ถœ๋ ฅ

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

์ž…์ถœ๋ ฅ ์˜ˆ

์˜ˆ์ œ ์ž…๋ ฅ ์˜ˆ์ œ ์ถœ๋ ฅ
5457
3
6 7 8
6

โœ๏ธ ํ’€์ด

๊ฒฝ์šฐ์— ๋”ฐ๋ฅธ ์ฒ˜๋ฆฌ๋ฅผ ์ž˜ ํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

 

100๋ฒˆ ์ฑ„๋„์—์„œ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฒˆํ˜ธ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ฑ„๋„์„ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ๊ณผ +-๋ฒ„ํŠผ๋งŒ ๋ˆ„๋ฅด๋Š” ๊ฒƒ์ด ์ข‹์€์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค. ๋‚ด ๊ฒฝ์šฐ ๋‹ต์„ ์ €์žฅํ•˜๋Š” cnt์— ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ 100๋ฒˆ์—์„œ ์‹œ์ž‘ํ•ด +-๋งŒ ์ด์šฉํ•ด ๋ชฉํ‘œ ์ฑ„๋„ N์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒฝ์šฐ๋กœ ์„ค์ •ํ–ˆ๊ณ , ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ๋” ์ž‘์€๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ์‹œ์ผฐ๋‹ค.

 

๋งŒ์•ฝ ํ˜„์žฌ ์ฑ„๋„์ด 100์ธ๋ฐ 100์˜ ์ฑ„๋„๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์•ฝ N์ด 100์ด๋ผ๋ฉด 0์„ ์ถœ๋ ฅํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์— ๊ฐ€์žฅ ์ตœ์†Ÿ๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค. ์ด๋•Œ ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์„ Set ์ž๋ฃŒ๊ตฌ์กฐ์— ์ €์žฅํ•ด์„œ ๊ฐ’์ด ์žˆ๋Š”์ง€ ์—†๋Š”์ง€๋ฅผ ํŒ๋ณ„ํ–ˆ๋‹ค. ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉด์„œ 0๋ถ€ํ„ฐ 1,000,000๊นŒ์ง€๋ฅผ ๋ฒ”์œ„๋กœ ์žก์•˜๋Š”๋ฐ ๊ทธ ์ด์œ ๋Š” ๋ชฉํ‘œ์ฑ„๋„์ด ์ตœ๋Œ€ 500,000์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๋ฐฐ๋กœ ์‚ฐ์ •ํ–ˆ๋‹ค.

 

์‚ฌ์‹ค ์ฒ˜์Œ ์ด ๋ฒ”์œ„ ์ƒ๊ฐํ•  ๋•Œ N * 2๋กœ ์žก์•˜์—ˆ๋Š”๋ฐ ๊ณ„์† "ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค"๋ผ๋Š” ๋ฌธ๊ตฌ๋ฅผ ๋งˆ์ฃผ์ณ์•ผ ํ–ˆ๋‹ค. ์—ฌ๋Ÿฌ ์˜ˆ์™ธ๋ฅผ ์ƒ๊ฐํ•˜๋‹ค๊ฐ€ 0์ธ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•˜๊ฒŒ ๋˜์—ˆ๊ณ  1,000,000์œผ๋กœ ์ˆ˜์ •ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉฐ i๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ์ˆซ์ž๊ฐ€ ๋œ๋‹ค. ์ด๋ฅผ ํƒ€์ž…๋ณ€ํ™˜์„ ํ†ตํ•ด ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ๊ณ  ๊ฐ ์ž๋ฆฌ์— ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ–ˆ๋‹ค. ๋งŒ์•ฝ ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์ด ์žˆ๋‹ค๋ฉด ๋ˆ„๋ฅผ ์ˆ˜ ์—†๋Š” ๋ฒˆํ˜ธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€ ๋ฐ˜๋ณต๋ฌธ(for)๋ฅผ continue ์‹œ์ผœ์ฃผ๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ N๊ณผ ๋น„๊ตํ•˜๊ณ  ์ž๋ฆฌ์ˆ˜๋ฅผ ๋”ํ•ด ์ตœ์†Œ๊ฐ’์„ ๊ฐ€์ง€๋Š” cnt์— ๋Œ€์†Œ๋ฅผ ๋น„๊ตํ•˜๋ฉฐ ๊ฐฑ์‹ ํ–ˆ๋‹ค. ๊ฒฐ๊ตญ ๋ฐ˜๋ณต๋ฌธ์ด ์ข…๋ฃŒ๋˜๋ฉด cnt์— ์žˆ๋Š” ๊ฐ’์ด ๊ฐ€์žฅ ์ตœ์†Œ๊ฐ€ ๋˜์–ด ์ถœ๋ ฅํ•˜๋ฉฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

โŒจ๏ธ ์ฝ”๋“œ

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './testcase/1107.txt';

let input = fs.readFileSync(filePath).toString().trim().split('\n');

const target = input[0];
if (target === '100') console.log(0);
else {
  const disableBtn = +input[1] ? new Set(input[2].split(' ')) : new Set();
  let cnt = Math.abs(+target - 100);

  outer: for (let i = 0; i <= 1000000; i++) {
    const check = String(i);
    for (let j = 0; j < check.length; j++) {
      if (disableBtn.has(check[j])) continue outer;
    }

    const compare = Math.abs(+target - i) + check.length;
    cnt = Math.min(compare, cnt);
  }

  console.log(cnt);
}