기타

별찍기

swchung09 2025. 5. 26. 00:12

이 문제는 다음과 같은 X자 형태로 출력하는 문제이다.

*     *

 *   *

   * 

 *  *

*    *


이 문제를 나누어서 풀어보면,

1번째 반복문 - 공백 추가, 별찍기, 공백 추가, 별찍기(하나만 있어야 하는 중간 지점이 아니라면)

2번째 반복문 - 공백 추가, 별찍기, 공백 추가, 별찍기

2번째 반복문은 1번째 반복문에서 별이 하나만 있는 부분을 제외한 부분을 반대로 하면 된다.

 

다만 이 문제에서 나는 console.log를 사용하려고 했고, console.log에서는 줄바꿈이 필수적이라 text에 저장한 다음 최종적으로 줄바꿈이 필요한 시점에 출력하는 방식을 사용하였다.


1번째 반복문에서 공백을 추가하고 별찍기를 한 다음, 다시 공백을 추가하고 별찍기를 하는 부분이다.

for (let i = 0; i < n; i++){
    let text = '';
    for (let j = 0; j < i; j++){//공백 추가
        text += ' ';
    }
    text += '*';//별찍기
    for (let j = 0; j < 2*(n-i-1)-1; j++){//공백 추가
        text += ' ';
    }
    if (i != n-1){//별찍기(하나만 있는 부분이 아니라면)
        text += '*';
    }
    console.log(text);//최종 출력
}

이후 2번째 반복문에서는 이를 역순으로 출력하는 코드로 구성했다.

for (let i = n-2; 0 <= i; i--){
    let text = '';
    for (let j = 0; j < i; j++){//공백 추가
        text += ' ';
    }
    text += '*';//별찍기
    for (let j = 0; j < 2*(n-i-1)-1; j++){//공백 추가
        text += ' ';
    }
    text += '*';//별찍기
    console.log(text);/최종 출력
}

최종 코드

let n = 4;
for (let i = 0; i < n; i++){
    let text = '';
    for (let j = 0; j < i; j++){
        text += ' ';
    }
    text += '*';
    for (let j = 0; j < 2*(n-i-1)-1; j++){
        text += ' ';
    }
    if (i != n-1){
        text += '*';
    }
    console.log(text);
}
for (let i = n-2; 0 <= i; i--){
    let text = '';
    for (let j = 0; j < i; j++){
        text += ' ';
    }
    text += '*';
    for (let j = 0; j < 2*(n-i-1)-1; j++){
        text += ' ';
    }
    text += '*';
    console.log(text);
}

'기타' 카테고리의 다른 글

뒤집어도 같은 숫자  (0) 2025.05.26
별찍기 with 숫자  (0) 2025.05.26
우분투, SSH  (0) 2025.05.14
Git, Github  (3) 2025.05.07
구조체가 담긴 배열의 포인터  (0) 2025.04.15