-
Notifications
You must be signed in to change notification settings - Fork 0
/
10997.js
48 lines (38 loc) · 1.1 KB
/
10997.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
/*
중앙 잡고
1 2 2 4 4 6 6 8 8 ... 이렇게 그리면 됨
맨 마지막에는 2 빼고 그리기
1 6 10 14 ... 까지 그리면 됨
중앙 좌표: (size-1)*2 행 size*2 열
단, size=1이면 0열
*/
const INPUT_FILE = process.platform === 'linux' ? '/dev/stdin' : './input';
const size = Number(require('fs').readFileSync(INPUT_FILE).toString());
const maxLength = size > 1 ? size * 4 - 2 : 1;
const board = Array.from({ length: maxLength + 1 }, () => new Array(maxLength - 1).fill(' '));
const DIRECTIONS = [
[-1, 0],
[0, 1],
[1, 0],
[0, -1],
];
let currentDirection = 0;
let r = size > 1 ? size * 2 : 0;
let c = (size - 1) * 2;
board[r][c] = '*';
for (let length = 2; length <= maxLength; length += 2) {
for (let repeat = 0; repeat < 2; repeat += 1) {
const [dr, dc] = DIRECTIONS[currentDirection];
for (let line = 0; line < length; line += 1) {
r += dr;
c += dc;
board[r][c] = '*';
}
currentDirection = (currentDirection + 1) % 4;
}
}
if (size > 1) {
board[0].pop();
board[0].pop();
}
console.log(board.map((row) => row.join('').trim()).join('\n'));