본문 바로가기
공부/Javascript + jQuery

Javascript for문 연습하기 : 별 찍기

by 취미취미 2023. 2. 6.
반응형

이전 블로그 내용 보는데 자바스크립트가 아니고 자바인 것 같은데...

너무 오래전이라 뭘 배우면서 썼던건지 기억이 안남.... 자바 정말 기초만 배우고 다시 쳐다보지도 않아서...

 

별 출력 컨트롤 하기.

 

이전 배운 for문을 활용하여 별모양 출력을 컨트롤해 보자.


 

****

****

****

별을 한 줄에 4개씩 총 3줄을 출력하는 for문을 만들어보자.

먼저 첫 for문으로 라인이 몇 번 반복되어야 할지 정해준다.

for문의 기초가 (1. 초기식; 2. 조건식; 4 증감식) {

        3. 조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;

}

으로 진행되니 위의 식을 풀어보자면

for( 초기 라인은 0; 라인이 3보다 적을 때; 라인 추가) {

      3. 조건

}

으로 우선 진행이 된다.

그리고 나면 이제 별에 대한 for문을 설정해 주어야 하는데 별이 한 줄에 4개를 넣어 주어야 하기 때문에

for( 초기 별 = 0; 별이 4개보다 적을 때; 별을 추가해 준다) {

         3. 조건식 결과 실행 명령문.

}

위의 내용을 종합하여 수식을 적어보면 아래와 같이 된다.

 

for (let line = 0; line<3; line++){
	for(let star = 0; star<4; star++){
    document.write("*");
	}
    document.write("<br>");
}

여기서 사용된 document.write는 console창이나 alert의 창이 아닌 html 화면에 바로 출력해 주는 함수라고 한다.

document.write(출력내용); 으로 사용할 수 있다.

결과물은 위와 같다.

 


*

**

***

****

왼쪽 정렬된 삼각형 별 만들기.

 

line이 한 줄 늘어날 때마다 별이 1개씩 늘어나는 구조

이번 문제 또한 2개의 for문을 사용하기로 했다.

 

for( 라인의 수 =0; 라인의 수가 4개보다 작을 때; 라인 추가 ) {

       라인출력

}

라인이 4보다 작을 때 계속해서 라인을 하나 더 추가해 준다는 내용이기 때문에

첫 번째 for문은 위의 첫번째 문제의 for문과 크게 다른 내용이 없다.

문제는 2번째 for문

2번째 for문은 첫 줄에는 별 1개, 2번째 줄에는 별 2개 3번째 줄에는 별 3개이므로

라인이 늘어날 때마다 별이 늘어나므로 라인과 엮어서 수식을 만들면 편하다.

 

for( 별의 수 =0; 별의 수가 라인보다 적거나 같을 때; 별 추가) {

      별 출력

}

으로 하고 수식을 정리하면 아래와 같다.

for(let line=0; line<4; line++) {
  for(let star=0; star<=line; star++ ) {
    document.write("*")
  }
  document.write("<br>")
}


역 삼각형 별 만들기

****

***

**

*

위의 삼각형과는 반대로 점점 별의 숫자가 1개씩 줄어드는 상황

이것 또한 위의 식을 이용하면

for(라인이 0일 때, 라인이 4보다 적으면; 라인을 하나 추가){

     for(별이 4일 때; 별이 라인보다 크면; 별을 하나 뺀다){

     조건 출력

}

조건 출력

}

이 되므로 이 코드를 옮기면

for (let line=0; line<5; line++){
  for(let star=5; star>line; star--) {
    document.write("*")
  }
  document.write("<br>")
}

이와 같음

결과는


   *

  **

 ***

****

우측 정렬 된 삼각형

 

for(라인이 0일 때; 라인이 4보다 작으면; 라인 추가) {

     for(스페이스바가 처음에는 3개; 스페이스바가 라인보다 크면; 스페이스바 하나 제거){

       출력("스페이스");

}

     for (별이 처음에 0일 때; 별이 라인보다 작거나 같으면; 별 하나 추가){

          출력("*")

}

 출력("<br>")

}

이걸 코드로 변환하면

for(line=0; line<4; line++){
  for(space=3; space>line; space--){
    document.write("&nbsp;")
  }
  for(star=0; star<=line; star++){
    document.write("*")
  }
  document.write("<br>")
}


마지막 피라미드 모양 만들기!

 

     *

    ***

   *****

  *******

 *********

***********

첫번째 줄 : 빈 공간 : 5, 별 : 1개,

두 번째 줄 : 빈 공간 : 4, 별 : 3개,

세 번째 줄 : 빈 공간 : 3, 별 : 5개,

네 번째 줄 : 빈 공간 : 2, 별 : 7개

다섯 번째 줄 : 빈 공간 : 1, 별 : 9개

여섯 번째 줄 : 빈 공간 : 0, 별 : 11개

 

for ( 라인이 0 일 때; 라인이 7보다 작으면; 라인 추가){

     for( 빈공간이빈 공간이 =0일 때; 빈 공간이 6에서 라인을 뺀 것보다 작으면; 빈 공간 ++) {

           빈공간 출력;

}

    for ( 별이 0일 때, 별이 라인의 2배 보다 1 많은 것보다 작을 때; 별 증가){

       별 출력

}

 라인 출력

}

 

for (let line=0; line<7; line++){
  for(let blank = 0; blank<6-line; blank++){
    document.write("&nbsp;")
  } for(let star = 0; star<line*2+1; star++){
    document.write("*")
  }
  document.write("<br>")
}

 

사실 이것보다 더 간단하게 코드를 짤 수 있을 것 같은데 지금 당장 생각나는게 이 방법밖에 없음...😢

line이 =0이라면; line 7보다 작으면 라인을 하나 추가한다.

= for (let line=0; line<7; line++) {

         document.write("<br>")

}

 

빈 칸이 =0이라면; 빈칸이 6에서 라인을 뺀 것보다 작다면 빈칸 추가

= for(let blank = 0; blank <6-line; blank++) {

         document.write("&nbsp;")

}

별이 0이라면; 별이 라인*2+1보다 작다면 별 추가하기 

=for (let star=0; star<line*2+1; star++) {

         document.wirte("*")

}

 

수식으로 보면 복잡해 보이는데 풀어서 이야기 하자면

첫 번째 for 문 빈 공간이 0이므로 6-line(첫번째 줄 = 1); 빈공간 +

두 번째 반복 빈 공간 : 1, 6-1=5, 빈 공간+

세 번째 반복 빈 공간 : 2, 6-1=5, 빈공간 + 

네 번째 반복 빈 공간 : 3, 6-1=5, 빈공간 +

다섯 번째 반복 빈 공간 : 4, 6-1=5, 빈공간 +

여섯 번째 반복 빈 공간 : 5, 6-1= 5, 더 이상 작지 않으므로 중단.

= 그러므로 첫 번째 줄 빈 공간이 5가 되며 다음 for 문으로 넘어간다.

 

다음 for 문은 별이므로 별이 0이고 라인(첫 번째 라인) 1*2+1= 3;

0이 3보다 작기 때문에 별 + 1개

=빈 공간 5개 + 별 1개 + <br>

이 코드가 반복되면 

이렇게 만들 수 있음!

 

 

오랜만에 별 만들기 for문 하려니까 너무 어려워서 한참 찾음

 

댓글