-
Notifications
You must be signed in to change notification settings - Fork 0
/
1038.js
64 lines (51 loc) · 1.22 KB
/
1038.js
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
가장 큰 감소하는 수: 9,876,543,210
i자리 감소하는 수의 개수?
opt(i, num) := 가장 큰 자릿수가 num인 i자리 감소하는 수의 개수
opt(i, num) = sum(opt(i-1, k)) (단, k < num)
98
210
310
320
그냥 하나씩 늘려볼까
*/
const INPUT_FILE = process.platform === 'linux' ? '/dev/stdin' : './input';
const target = Number(require('fs').readFileSync(INPUT_FILE).toString());
const value = [0];
let count = 0;
const isComplete = () => {
for (let i = 0; i < value.length; i += 1) {
if (value[i] !== 10 - value.length + i) return false;
}
return true;
};
const reset = (before) => {
for (let i = 0; i < before; i += 1) {
value[i] = i;
}
};
const increase = () => {
for (let i = 0; i < value.length - 1; i += 1) {
if (value[i] + 1 < value[i + 1]) {
reset(i);
value[i] += 1;
return;
}
}
reset(value.length - 1);
value[value.length - 1] += 1;
};
const setNextValue = () => {
if (value.length === 10) return;
if (isComplete()) {
reset(value.length);
value.push(value.length);
} else {
increase();
}
count += 1;
};
for (let i = 1; i <= target; i += 1) {
setNextValue();
}
console.log(count === target ? value.reverse().join('') : -1);