🔗 문제 링크
https://www.acmicpc.net/problem/2447
✏️ 풀이
const N = Number(require('fs').readFileSync('/dev/stdin').toString().trim());
const basicPattern = ['***', '* *', '***'];
const getPattern = (n) => {
if (n === 3) {
return basicPattern;
}
const prevPattern = getPattern(n / 3);
const topBottom = prevPattern.map(line => line.repeat(3));
const center = prevPattern.map(line => `${line}${' '.repeat(line.length)}${line}`)
return [...topBottom, ...center, ...topBottom];
};
console.log(getPattern(N).join('\n'));
N = 3일 때의 기본 패턴을 문자열을 3개 가진 배열로 정의한다.
getPattern 함수에서 N = 3일 때에는 기본 패턴을 반환한고, 그 외에는 재귀적으로 N / 3인 경우의 패턴(getPattern(N / 3))을 구하여 그 패턴을 위/아래 부분과 중간 부분으로 나누어 새 패턴을 만들어서 이어 붙인다. 위/아래는 기존 패턴을 3번씩 이어 붙인 모양이므로 각 문자열을 3번 반복한 형태로 변형하고, 중간은 기존 패턴을 양 옆에 한 번씩 반복후 가운데에는 빈 문자열이 있는 모양이므로 가운데에 문자열의 길이만큼의 공백을 두고 양 옆에는 문자열을 한 번씩 붙인 형태로 변형하였다. 그 다음 최종적으로 [위, 중간, 아래]의 형태로 다시 배열에 합쳐서 반환하여 더 큰 패턴을 완성하였다.
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 2470 - Node.js] 두 용액 (0) | 2023.01.22 |
---|---|
[백준 1991 - Node.js] 트리 순회 (0) | 2023.01.12 |
[백준 1644 - Node.js] 소수의 연속합 (0) | 2023.01.12 |
[백준 1806 - Node.js] 부분합 (0) | 2023.01.11 |
[백준 15565 - Node.js] 귀여운 라이언 (0) | 2023.01.11 |