개발자를 희망하는 초보의 자기개발 이야기

백준 2444번 별 찍기 - 7 문제 - Node.js 본문

자료구조&알고리즘/BOJ(백준 온라인 저지)

백준 2444번 별 찍기 - 7 문제 - Node.js

클라우드아실 2024. 11. 9. 12:32
반응형

문제 원문 링크

문제

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

입력

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

출력

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

예제 입력 1

5

예제 출력 1

    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *

풀이1

const fs = require("fs");
const N = Number(fs.readFileSync("dev/stdin").toString().trim());

for (let i = 1; i <= 2 * N - 1; i++) {
  let spaceCount, starCount;

  if (i <= N) {
    // 윗부분
    spaceCount = N - i;
    starCount = 2 * i - 1;
  } else {
    // 아랫부분
    spaceCount = i - N;
    starCount = 2 * (2 * N - i) - 1;
  }
  let line = " ".repeat(spaceCount) + "*".repeat(starCount);
  console.log(line);
}

최대한 헷갈리지 않게 지문대로 입력값을 숫자형으로 N 변수에 담았다.
반복할 범위는 지문에서 ' 첫째 줄부터 2×N-1번째 줄까지' 라고 알려주고 있다.
1~5번째까지는 공백이 줄고 별이 늘어나지만, 6~9번째는 공백이 늘어나고, 별이 줄어드는 것을 표현해야 했는데,
반복문이 진행되는 중에 "*"과 " "를 반복하는 이중 반복문을 만들면서 이를 해결하려고 하니 너무 복잡하게 진행되고 있었다.
항상 코드가 복잡해지고 하드코딩되면 어딘가 잘못되고 있는거였기 때문에
반복문 말고 반복할 수 있는 다른 방법이 없을까 하던 중 repeat 메서드를 발견하게 되면서
공백과 별의 수량 변화를 if문으로 분기처리하고 repeat 메서드를 사용해 수량의 결과를 반복시켜 겨우 해결하게 되었다.

반응형