Programing/백준

[백준/JS] 2444 - 별 찍기 - 7

sunflo 2023. 9. 4.
 

2444번: 별 찍기 - 7

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

www.acmicpc.net

풀이

KeyPoint
반복문
문제의 규칙 알아내기
  1. "공백"과 "별"의 개수를 정하는 count 변수들을 생성한다.
    • let spaceCount = input - 1
      • input이 5면 1번째 줄은 공백 4, 별1 로 시작한다.
      • input이 4면 1번째 줄은 공백 3, 별1로 시작한다.
      • 따라서 공백의 첫번째 값은 input - 1이 된다.
    • let starCount = 1;
      • 별은 항상 1부터 시작한다.
  2. 문제에 나와있는 대로 일단 input 의 2 X input -1 번째 줄까지 반복하는 반복문을 만든다
    1. 한줄한줄 출력할 내용을 담은 변수 line을 생성한다.
    2. spaceCount만큼 line변수에 공백을 넣어주는 반복문을 만든다.
    3. starCount만큼 line변수에 별을 넣어주는 반복문을 만든다.
    4. 규칙을 적용한다.
      • 1번째 줄 ~ 5번째 줄 : 공백은 1씩 줄고, 별은 2씩 늘어난다.
      • 5번재 줄 ~ 9번째 줄 : 공백은 1씩 늘고, 별은 2씩 줄어든다.

규칙 ( input = 5일 때)

1번째 줄 : 공백4 별1    // 공백은 1개씩 감소하고, 별은 2개씩 증가한다.
 
2번째 줄 : 공백3 별3
 
3번째 줄 : 공백2 별5
 
4번째 줄 : 공백1 별7
 
5번째 줄 : 공백0 별9    // 여기서부터 규칙을 반대로 적용한다. 공백은 1개씩 증가하고, 별은 2개씩 감소한다.
 
6번째 줄 : 공백1 별7    
 
7번째 줄 : 공백2 별5
 
8번째 줄 : 공백3 별3
 
9번째 줄 : 공백4 별1
 

규칙 (input = 4일 때)

1번째 줄 : 공백3 별1    // 공백은 1개씩 감소하고, 별은 2개씩 증가한다.
 
2번째 줄 : 공백2 별3
 
3번째 줄 : 공백1 별5
 
4번째 줄 : 공백0 별7    // 여기서부터 규칙을 반대로 적용한다. 공백은 1개씩 증가하고, 별은 2개씩 감소한다.
 
5번째 줄 : 공백1 별5    
 
6번째 줄 : 공백2 별3    
 
7번째 줄 : 공백3 별1
 

코드

const input = require("fs").readFileSync("/dev/stdin").toString();

let spaceCount = input - 1;
let starCount = 1;

// 총 2 * input - 1 번 출력하는 반복문
for (let i = 0; i < 2 * input - 1; i++) {
  let line = ""; //출력할 공백과 별을 담은 변수
  
  // line에 공백을 넣는 반복문
  for (let j = spaceCount; j > 0; j--) {
    line += " ";
  }
  
  // line에 별을 넣는 반복문
  for (let k = 0; k < starCount; k++) {
    line += "*";
  }

  // 5 ~ 9번째까지의 규칙
  if (i + 1 >= input) {
    spaceCount++;
    starCount -= 2;
  }
  // 1 ~ 5 번째까지의 규칙
  else {
    spaceCount--;
    starCount += 2;
  }
  console.log(line);
}

댓글