자바스크립트/활용
자바스크립트 활용 19
whatd0udo
2024. 2. 27. 11:30
문제10 : 별 찍기
크리스마스 날, 은비는 친구들과 함께 파티를 하기로 했습니다. 그런데, 크리스마스 트리를 사는 것을 깜빡하고 말았습니다.
온 가게를 돌아다녀 봤지만 크리스마스 트리는 모두 품절이었습니다. 하는 수 없이 은비는 프로그래밍으로 트리를 만들기로 합니다. 은비를 위해 프로그램을 작성해 주세요.
**입력**
5
**출력**
*
***
*****
*******
*********
문제 분석
- 여러줄의 별로 구성되어있다
- 위에서 아래로 내려갈수록 별의 개수가 많아져야한다
- 각 줄의 별은 중앙 정렬이다
- 트리의 높이 ( 줄 수 )는 사용자로부터 입력받는다.
설계
- 높이 입력받기 : 사용자로부터 트리의 높이를 prompt() 메소드를 이용해서 입력받는다
- 각 줄 마다 별 출력하기
- 높이 만큼 반복해서 별을 출력한다
- 별 출력 : 각 줄의 별 갯수만큼 별을 출력한다
- 별 갯수만큼 * 문자를 출력한다
- 다음줄로 이동한다
- 트리 출력 후 마지막 줄 바꿈을 추가한다
- 중앙정렬을 위한 공백 계산하기
- 각 줄에서 별의 시작점까지 필요한 공백의 수를 계산한다 ( 트리의 높이 - 현재 줄에서의 별 개수 / 2) )로 계산
- 줄 바꿈 처리 : 각 줄이 끝날때마다 줄 바꿈을 추가하여 트리의 모양을 만든다
( 트리의 높이 - 현재 줄에서의 별 개수 / 2) )로 계산하는 이유
트리의 형태가 각 줄 마다 점점 넓어지는 형태를 가지기 때문이다.
이 공식은 트리의 각 줄에 출력할 별의 개수를 결정하기 위해 사용된다.
별이 증가하는 패턴은 1,3,5,7 … 과 같이 홀수로 증가하는데 이 패턴은 각 줄마다 별의 개수가 이전 줄보다 정확히 2개씩 더 많다는것을 의미한다.
이러한 증가 패턴을 수학적으로 표현하면 첫번째 줄 : 1개 두번째줄 3개 세번째 줄 5개 처럼 필요하므로 n번째 줄에 ( 2n - 1) 개의 별이 필요하다
공백의 개수 계산 방식
( 트리의 높이 - 현재 줄 번호 ) 계산은 각 줄이 트리의 상단에 위치할수록 더 많은 공백을 추가하고 , 아래로 내려갈수록 공백의 수를 줄여서 별이 점점 확장되는 모양을 만들어낸다.
// 트리의 높이를 사용자로부터 입력받음
var height = parseInt(prompt("크리스마스 트리 높이를 입력하세요: "), 10);
// 트리의 각 줄을 출력하는 반복문
for (var i = 1; i <= height; i++) {
// 이 줄에 출력할 별의 개수 계산
var stars = (2 * i) - 1;
// 이 줄에 필요한 공백의 개수 계산
var spaces = (height - i);
// 공백 출력
var line = '';
for (var j = 1; j <= spaces; j++) {
line += ' ';
}
// 별 출력
for (var k = 1; k <= stars; k++) {
line += '*';
}
// 한 줄 출력 후 줄바꿈 처리
console.log(line);
}