-
[백준 2447번] 별 찍기 - 10 (feat. NodeJS)Development/Program Solving 2021. 2. 5. 14:44728x90
2447번: 별 찍기 - 10
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이
www.acmicpc.net
문제
풀이
패턴을 파악하자!
반복되는 패턴이 중복되므로 재귀를 사용해서 푼다.
공백이 들어가는 좌표를 표면 (1,1), (1,4), (1,7) ... 이렇다.
이것을 공식으로 만들면 i % 3 === 1 && y % 3 === 1 이다.
거기다, 가운데 (n/3)X(n/3) 정사각형 모양으로 공백도 들어간다.
이것을 공식으로 만들면 (i/3) % 3 === 1 && (y/3) % 3 === 1 이다.
이렇게 두 개의 패턴을 적용해서 소스로 나타내면 아래와 같다.
const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); let input; let result = ""; const onInput = (value) => (input = parseInt(value)); const star = (i, j, num) => { if (i % 3 === 1 && j % 3 === 1) { result += " "; } else { if (num === 1) { result += "*"; } else { star(Math.floor(i / 3), Math.floor(j / 3), Math.floor(num / 3)); } } }; const onClose = () => { for (let i = 0; i < input; i++) { for (let j = 0; j < input; j++) { star(i, j, input); } result += "\n"; } console.log(result); process.exit(); }; rl.on("line", onInput).on("close", onClose);
엄청 쉬운 문제라는데... 혼자 못 풀어서 사람들이 제출한 코드를 참고했다.
아니 문제만 보면 바로 패턴이 어떻게 보이는거지?ㅠㅠ
계속 풀다보면 노하우가 생기나...
재귀알고리즘 문제 더 반복해야겠다.
728x90'Development > Program Solving' 카테고리의 다른 글
[백준 단계별로 풀어보기] 반복문 with C# (0) 2023.07.10 [백준 10829번] 이진수 변환 (feat. NodeJS) (0) 2021.02.05 [백준 16395번] 파스칼의 삼각형 (feat. NodeJS) (0) 2021.01.08 [백준 10872번] 팩토리얼 (feat. NodeJS) (0) 2021.01.07 [백준 10870번] 피보나치 수 (feat. NodeJS) (0) 2021.01.07