코딩테스트 공부/node.js

(백준)2444. 별 찍기

책다니엘 2024. 1. 20. 04:16

문제

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

입력

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

출력

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

 

예제 입력 1

5

예제 출력 1

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

 

 

풀이


모르겠다!!!!!!!

코드는 너무 예쁘게 동작하는데 출력 형식이 잘못되었단다. 뭘 어떻게 제대로 출력해야 하는지 백준은 알려주지를 않는다.

디버거나 콘솔 창이라도 좀 띄워줬으면 보고 수정하는데ㅠㅠㅠㅠㅠ 

 

풀이는 일단 다음과 같다.

1. 먼저 빈 배열 tempArr를 코드 가장 위에 생성한다. 

2. 별의 갯수가 최대로 늘어나는 숫자(받아 오는 수이다) num을 선언하고, 그 수만큼 반복하는 for문을 연다

3. 그 안에 빈 배열 arr을 생성해서 공백 문자를 push한다.(for 문은 --로 역방향으로 되어 있어서 반복될수록 공백 문자는 1개씩 적게 push된다)

4. 그 배열에 홀수(2*N-1) 개수의 '*'로 fill()된 배열을 하나 생성해서, join("")한 다음 arr 배열에 push한다

5. arr 배열을 다시 join하면 한 줄이 완성된다. 이걸 또 써먹을 거기 때문에 tempArr 배열에 push한다

6. 그러면 '별의 갯수가 늘어나는' 줄들이 담긴 배열 tempArr가 완성된다. 

7. console.log(tempArr.join("\n"))로 개행 문자로 join한 값을 출력해준다. 그러면 다이아몬드의 절반까지는 출력이 된다.

8. 별의 갯수가 가장 많은 마지막 값은 이제 안 쓰기 때문에 pop()을 통해 없애 준다.

9. 간단하게 tempArr를 reverse()해준다.

10. 다시 console.log(tempArr.join("\n"))로 개행문자로 join한 값을 출력해준다. 그러면 다이아몬드의 나머지 절반이 출력이 된다.

 

뭐가 문제인지 모르겠다...

 

let fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim();
let num = Number(input);
let temp = num;
let tempArr = [];

for (let i = 0; i < num; i++) {
  let arr = [];
  for (let j = temp - 1; j >= 0; j--) {
    arr.push(" ");
  }
  let starArr = new Array(2 * (i + 1) - 1).fill("*");
  arr.push(starArr.join(""));
  tempArr.push(arr.join(""));
  temp--;
}

console.log(tempArr.join("\n"));

tempArr.pop();
tempArr.reverse();

console.log(tempArr.join("\n"));

 

 

* 24/01/21 수정

답을 찾았다!

chatGPT에게 물어보니 왼쪽에 공백이 하나 더 찍힌 것이었다.

숫자 하나를 바꿔 주니 완벽하게 잘 나온다.

 

let fs = require("fs");
let input = fs.readFileSync("test-case.txt").toString().trim();
let num = Number(input);
let temp = num;
let tempArr = [];

for (let i = 0; i < num; i++) {
  let arr = [];
  for (let j = temp - 2; j >= 0; j--) {
    arr.push(" ");
  }
  let starArr = new Array(2 * (i + 1) - 1).fill("*");
  arr.push(starArr.join(""));
  tempArr.push(arr.join(""));
  temp--;
}

console.log(tempArr.join("\n"));

tempArr.pop();
tempArr.reverse();

console.log(tempArr.join("\n"));

'코딩테스트 공부 > node.js' 카테고리의 다른 글

(백준)25206. 너의 평점은  (0) 2024.01.21
(백준)1316. 그룹 단어 체커  (1) 2024.01.21
(백준)2908.상수  (0) 2024.01.20
(백준)2675.문자열 반복  (0) 2024.01.20
(백준)10809. 알파벳 찾기  (0) 2024.01.20