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

Algorithm

[Algorithm] ๋กœ๋˜ (๋ฐฑ์ค€ - 6603)

๐Ÿ“‹ ๋ฌธ์ œ

๋…์ผ ๋กœ๋˜๋Š” {1, 2, ..., 49}์—์„œ ์ˆ˜ 6๊ฐœ๋ฅผ ๊ณ ๋ฅธ๋‹ค.

๋กœ๋˜ ๋ฒˆํ˜ธ๋ฅผ ์„ ํƒํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ์ „๋žต์€ 49๊ฐ€์ง€ ์ˆ˜ ์ค‘ k(k>6)๊ฐœ์˜ ์ˆ˜๋ฅผ ๊ณจ๋ผ ์ง‘ํ•ฉ S๋ฅผ ๋งŒ๋“  ๋‹ค์Œ ๊ทธ ์ˆ˜๋งŒ ๊ฐ€์ง€๊ณ  ๋ฒˆํ˜ธ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, k=8, S={1,2,3,5,8,13,21,34}์ธ ๊ฒฝ์šฐ ์ด ์ง‘ํ•ฉ S์—์„œ ์ˆ˜๋ฅผ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ์ด 28๊ฐ€์ง€์ด๋‹ค. ([1,2,3,5,8,13], [1,2,3,5,8,21], [1,2,3,5,8,34], [1,2,3,5,13,21], ..., [3,5,8,13,21,34])

์ง‘ํ•ฉ S์™€ k๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ˆ˜๋ฅผ ๊ณ ๋ฅด๋Š” ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ž…๋ ฅ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ํ•œ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ˆ˜๋Š” k (6 < k < 13)์ด๊ณ , ๋‹ค์Œ k๊ฐœ ์ˆ˜๋Š” ์ง‘ํ•ฉ S์— ํฌํ•จ๋˜๋Š” ์ˆ˜์ด๋‹ค. S์˜ ์›์†Œ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

์ž…๋ ฅ์˜ ๋งˆ์ง€๋ง‰ ์ค„์—๋Š” 0์ด ํ•˜๋‚˜ ์ฃผ์–ด์ง„๋‹ค. 

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค ์ˆ˜๋ฅผ ๊ณ ๋ฅด๋Š” ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ด๋•Œ, ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์‚ฌ์ด์—๋Š” ๋นˆ ์ค„์„ ํ•˜๋‚˜ ์ถœ๋ ฅํ•œ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

์˜ˆ์ œ ์ž…๋ ฅ ์˜ˆ์ œ ์ถœ๋ ฅ
7 1 2 3 4 5 6 7
8 1 2 3 5 8 13 21 34
0
1 2 3 4 5 6
1 2 3 4 5 7
1 2 3 4 6 7
1 2 3 5 6 7
1 2 4 5 6 7
1 3 4 5 6 7
2 3 4 5 6 7

1 2 3 5 8 13
1 2 3 5 8 21
1 2 3 5 8 34
1 2 3 5 13 21
1 2 3 5 13 34
1 2 3 5 21 34
1 2 3 8 13 21
1 2 3 8 13 34
1 2 3 8 21 34
1 2 3 13 21 34
1 2 5 8 13 21
1 2 5 8 13 34
1 2 5 8 21 34
1 2 5 13 21 34
1 2 8 13 21 34
1 3 5 8 13 21
1 3 5 8 13 34
1 3 5 8 21 34
1 3 5 13 21 34
1 3 8 13 21 34
1 5 8 13 21 34
2 3 5 8 13 21
2 3 5 8 13 34
2 3 5 8 21 34
2 3 5 13 21 34
2 3 8 13 21 34
2 5 8 13 21 34
3 5 8 13 21 34



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

์ด ๋ฌธ์ œ๋Š” ์žฌ๊ท€๋ฅผ ์ด์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค. 

 

์šฐ์„  ์ผ€์ด์Šค๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ์ฃผ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— console.log๋ฅผ ํ•œ ๋ฒˆ๋งŒ ์ฐ๊ธฐ ์œ„ํ•ด์„œ answers๋ผ๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ ๋‹ด์•˜๋‹ค. ๋˜ํ•œ. ๋‹ต์œผ๋กœ ๋‚˜์˜ฌ ์ˆซ์ž๋“ค์ด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์–ด์ง„ ์ผ€์ด์Šค๋ฅผ ์ •๋ ฌ์‹œ์ผœ์ฃผ๊ณ  ์กฐํ•ฉ์„ ๊ตฌํ–ˆ๋‹ค. 

 

์žฌ๊ท€๋กœ search๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๊ณ„์†ํ•ด์„œ ํ˜ธ์ถœํ•˜๋ฉด์„œ select์— ์ˆซ์ž๋ฅผ ์„ ํƒํ•ด์„œ pushํ–ˆ๋‹ค. ์ด๋•Œ ์ˆซ์ž๋“ค์—์„œ ์ˆซ์ž๋ฅผ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ˜๋ณต๋ฌธ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์‹œ์ž‘ํ•  ์ธ๋ฑ์Šค๋ฅผ ๊ณ„์†ํ•ด์„œ ๋„˜๊ฒจ์ฃผ๋ฉฐ ์ค‘๋ณต์„ ํƒ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋„๋กํ–ˆ๋‹ค. ์ด 6๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋ฝ‘์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณ ๋ฅธ ์ˆซ์ž๊ฐ€ 6๊ฐœ ์ด์ƒ์ด ๋˜๋Š” ์‹œ์ (select.length >= 6)์— answer์— ๋„ฃ์–ด์ฃผ์—ˆ๊ณ  ๋” ์ด์ƒ ์žฌ๊ท€๊ฐ€ ์ผ์–ด๋‚˜์ง€ ์•Š๋„๋ก returnํ–ˆ๋‹ค. ์ดํ›„ return์ด ๋˜๊ณ  ์„ ํƒํ–ˆ๋˜ ์ˆซ์ž๋ฅผ popํ•˜๋ฉด์„œ ๋ฐ˜๋ณต๋ฌธ์ด ๊ณ„์† ์ˆ˜ํ–‰๋˜๋ฉฐ ๋ชจ๋“  ์กฐํ•ฉ์„ ์„ ํƒํ•˜๊ฒŒ ๋œ๋‹ค.

 

ํ•˜๋‚˜์˜ ์ผ€์ด์Šค๋ฅผ ๋‹ค ์„ ํƒํ•˜๊ฒŒ ๋˜๋ฉด answer์— ๋ชจ๋“  ์ˆซ์ž๋“ค์ด ๋‹ด๊ฒจ์žˆ๋Š”๋”” "\n"์œผ๋กœ join ํ•ด์ฃผ๊ฒŒ ๋˜๋ฉด ์ค„๋ฐ”๊ฟˆ๋˜์–ด answers์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๊ณ  ๋งˆ์ง€๋ง‰์— ์ผ€์ด์Šค๋งˆ๋‹ค ๊ณต๋ฐฑ์„ ๋„ฃ์–ด์ฃผ๋ฉฐ("\n"์œผ๋กœ ๋‹ค์‹œ ํ•œ๋ฒˆ join) ์ถœ๋ ฅํ•˜๋ฉฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

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

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

const inputs = fs.readFileSync(filePath).toString().trim().split('\n');

const answers = [];
for (const input of inputs) {
  if (input === '0') break;

  const nums = input.split(' ').map(Number);
  nums.shift();
  nums.sort((a, b) => a - b);
  const answer = [];

  const len = nums.length;
  const select = [];
  const search = idx => {
    if (select.length >= 6) {
      answer.push(select.join(' '));
      return;
    }

    for (let i = idx; i < len; i++) {
      select.push(nums[i]);
      search(i + 1);
      select.pop();
    }
  };

  search(0);
  answers.push(answer.join('\n'));
}
console.log(answers.join('\n\n'));