-
[백준 2447번] 별 찍기 - 10 (feat. NodeJS)Development/Program Solving 2021. 2. 5. 14:44728x90
문제
풀이
패턴을 파악하자!
반복되는 패턴이 중복되므로 재귀를 사용해서 푼다.
공백이 들어가는 좌표를 표면 (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