티스토리 뷰

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

 

3687번: 성냥개비

각 테스트 케이스에 대해서 입력으로 주어진 성냥개비를 모두 사용해서 만들 수 있는 가장 작은 수와 가장 큰 수를 출력한다. 두 숫자는 모두 양수이어야 하고, 숫자는 0으로 시작할 수 없다. 

www.acmicpc.net

const fs = require("fs");
const input = fs
  .readFileSync("./dev/stdin")
  .toString()
  .trim()
  .split("\n")
  .map(Number);

const N = input.shift();
const answer = [];

const Max = (num) => {
  let min = "";
  if (num % 2 == 1) {
    min += "7";
    num -= 3;
  }
  const L = num / 2;
  for (let i = 0; i < L; i++) {
    min += "1";
  }
  return min;
};

const MAX = Math.max(...input);
let minDP = new Array(MAX + 1).fill(Infinity);
minDP[2] = 1;
minDP[3] = 7;
minDP[4] = 4;
minDP[5] = 2;
minDP[6] = 6;
minDP[7] = 8;

const matches = [, , "1", "7", "4", "2", "0", "8"];
for (let i = 8; i <= MAX; i++) {
  for (let j = 2; j < 8; j++) {
    if (i - j < 2) continue;
    minDP[i] = Math.min(minDP[i], Number(`${minDP[i - j]}` + matches[j]));
  }
}

for (let i = 0; i < N; i++) {
  const num = input[i];
  answer.push(`${minDP[num]} ${Max(num)}`);
}

console.log(answer.join("\n"));
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함