[BAEKJOON] 2439번 ⭐️별찍기
2439번 ⭐️별찍기
문제
첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제
하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.
입력
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
출력
첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.
출력 예시 : 5
*
**
***
****
*****
풀이
const fs = require("fs");
const input = fs.readFileSync("./dev/stdin").toString();
let baekInput = Number(input);
let stars = ""; // 공백과 별을 받을 변수 선언
for (let i = 0; i < baekInput; i++) {
for (let j = baekInput - 1; j > i; j--) {
stars += " "; // 먼저 공백부터 채워주기
}
for (let k = 0; k <= i; k++) {
stars += "*"; // 남은 별 채워주기
}
stars += "\n"; // 줄 바꿈
}
console.log(stars);
이번에는 별을 오른쪽부터 쌓이도록 출력해야하는 문제였다. 별을 왼쪽부터 자연스럽게 출력하는 문제와의 차이점은 중간에 공백을 넣어야한다는 점이었다.
첫 줄에는 공백*4
, 별*1
이며 두번째 줄에는 공백*3
. 별*2
의 형식이다.
그렇기 때문에 동기적인 JavaScript
의 성격을 고려해서 for문
안에서 2개의 for문
이 돌아가도록 했다. 같은 변수 stars
에 공백과 별을 집어 넣고 마지막에 console.log(stars)
을 통해 출력할 생각이었다.
위의 코드로 실행을 하면 결과값은 맞게 잘 나온다. 하지만, 이중 for문
에 심지어 for문
을 두 개나 돌린 것이 마음에 걸렸다.
같은 스터디를 진행하고 있는 동기분들(무현님😎, 현재님✨, 동희님🌼, 영현님🧑🏻💻)과 이야기를 나눠보고 같은 문제에 대해서 코드를 공유해보니 좋은 방법이 있었다.
console.log()
를 사용할 때 공백 변수와 별 변수를 +
연산자를 통해서 더하면 됐다. 그렇게 하면 2중for문
으로 작성할 수 있다.
const fs = require("fs");
const input = fs.readFileSync("./dev/stdin").toString();
let baekInput = Number(input);
let star = '';
let blank = '';
for(i = 1; i <= baekInput; i++){
star += '*'; // 별 채우기
for(j = baekInput; j > i; j-- ){
blank += ' '; // 공백 채우기
}
console.log(blank + star);
blank = ''; // 출력 후에 초기화를 안하면 공백이 계속 쌓인다!
}
짜잔!!✨ 동일한 결과가 잘 나오는 것을 볼 수 있다. 찝찝한 마음을 남겨뒀던 코드가 훨씬 나아진 것 같아서 마음에 든다. 앞으로는 정답을 출력하는 것도 중요하지만 누가봐도 이해하기 좋은 코드를 작성할 수 있도록 고민도 더 해보려고 한다.
Author And Source
이 문제에 관하여([BAEKJOON] 2439번 ⭐️별찍기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jun_n3/BAEKJOON-2439번-별찍기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)