치춘짱베리굿나이스
[백준] 2448 본문
별 찍기 - 11
문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
입력
첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (0 ≤ k ≤ 10, k는 정수)
출력
첫째 줄부터 N번째 줄까지 별을 출력한다.
풀이
const recurStar = (n) => {
if (n === 3) return [" * ", " * * ", "*****"];
const ret = recurStar(n / 2);
let arr = [];
for (let j of ret) arr.push(" ".repeat(n / 2) + j + " ".repeat(n / 2));
for (let j of ret) arr.push(j + " " + j);
return arr;
};
const star = () => {
let input = parseInt(
require("fs").readFileSync("/dev/stdin").toString().trim()
);
console.log(recurStar(input).join("\n"));
};
star();
반성회
- 함수의 정의 : 현재 재귀 단계가
N
일 경우,N / 2
일 때의 삼각형 3개와 같은 크기의 역삼각형 공백 하나로 이루어진 큰 삼각형 만들기 - 종료조건:
n
이 3일 때 삼각형이 최소 크기를 가지므로 삼각형을 구성하는 문자열 배열[" * ", " * * ", "*****"]
을 반환 - 반환값:
- 하위 재귀 단계의 문자열 배열 반환값을
ret
변수로 받아온다 (얘를 반복해서 그려야 하므로)- 재귀 단계는 하위로 내려갈 때마다
n
을 2로 나누며, (n
은 3 * (2의 제곱수) 이므로)n
이 3이면 더이상 2로 나눌 수 없으므로 재귀를 중단한다
- 재귀 단계는 하위로 내려갈 때마다
- 현재 삼각형을 구성하는 각 줄을 담을 배열
arr
선언- 첫 번째 삼각형 (위의 한 개) 은 이전 재귀 단계에서 받아온 삼각형에 좌우로
n / 2
개의 공백을 더하여arr
배열에push
- 두 번째, 세 번째 삼각형은 이전 재귀 단계에서 받아온 삼각형 두 개를 가운데에 공백을 추가하여 좌우로 합쳐
arr
배열에push
- 첫 번째 삼각형 (위의 한 개) 은 이전 재귀 단계에서 받아온 삼각형에 좌우로
- 현재 재귀 단계에서의 배열 arr 반환 ⇒ 상위 재귀 단계에서 사용하거나, 그대로 출력
- 하위 재귀 단계의 문자열 배열 반환값을
- 최종적으로 반환하는 배열은 그리고자 하는 삼각형의 각 줄에 해당하는 문자열들을 담고 있으므로, 개행으로 구분하여 출력
'Javascript + Typescript > 자바스크립트로 알고리즘풀기' 카테고리의 다른 글
[백준] 2338 (0) | 2022.03.18 |
---|---|
[백준] 1992 (0) | 2022.03.18 |
[백준] 7287 (0) | 2022.03.18 |
[백준] 6749 (0) | 2022.03.18 |
[백준] 1463 (0) | 2022.03.17 |
Comments