Everything has an expiration date
063 - Java 과제 5-4 : 반복문 for문을 이용해 별 문자를 여러 모양으로 출력하는 프로그램 (다이아몬드) 본문
[Java]/과제
063 - Java 과제 5-4 : 반복문 for문을 이용해 별 문자를 여러 모양으로 출력하는 프로그램 (다이아몬드)
Jelly-fish 2023. 9. 1. 13:26package Test063;
/*==============================================
■■■ 실행 흐름의 컨트롤(제어문) ■■■
- 반복문(for문) 실습 및 관찰
================================================*/
// ○ 다중 for문(반복문의 중첩)을 활용한 별찍기 실습
// ○ 과제
// 다음과 같은 내용이 출력될 수 있도록
// 반복문의 중첩 구문을 작성하여 프로그램을 구현한다.
// 실행 예)
/*
*
***
*****
*******
*********
*******
*****
***
*
*/
public class Test063
{
public static void main(String[] args)
{
// 1. 변수 선언****************************************
int i; // for문에서 사용할 loof 변수
int j;
int k;
int l;
// 2. 반복문 for문을 통해 다음과 같은 Logic을 구현한다.****************
/*[Logic]▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤
[실행 과정]
『 l = 0 』────────────────────────────────────────────────────────────────────────────
1. 공백을 4번 출력한다. 4. 공백을 3번 출력한다. 7. 공백을 2번 출력한다.
2. "*"을 1번 출력한다. 5. "*"을 3번 출력한다. 8. "*"을 5번 출력한다.
3. 개행한다.\n 6. 개행한다.\n 9. 개행한다.\n
10. 공백을 1번 출력한다. 13. 공백을 0번 출력한다.
11. "*"을 7번 출력한다. 14. "*"을 9번 출력한다.
12. 개행한다.\n 15. 개행한다.\n
───────────────────────────────────────────────────────────────────────────────────
『 l = 1 』─────────────────────────────────────────────────────────────────────────────
1. 공백을 1번 출력한다. 4. 공백을 2번 출력한다. 7. 공백을 3번 출력한다.
2. "*"을 7번 출력한다. 5. "*"을 5번 출력한다. 8. "*"을 3번 출력한다.
3. 개행한다.\n 6. 개행한다.\n 9. 개행한다.\n
10. 공백을 4번 출력한다.
11. "*"을 1번 출력한다.
12. 개행한다.\n
───────────────────────────────────────────────────────────────────────────────────
(k의 값은 개행 횟수가 아니라, 1번 실행할 때 1씩 증가하는 loof변수값)
| l | i(공백) | j("*") | k(개행 \n) |
| 0 | 4 | 1 | 1 |
| 0 | 3 | 3 | 2 |
| 0 | 2 | 5 | 3 |
| 0 | 1 | 7 | 4 |
| 0 | 0 | 9 | 5 |
| 1 | 1 | 7 | 1 |
| 1 | 2 | 5 | 2 |
| 1 | 3 | 3 | 3 |
| 1 | 4 | 1 | 4 |
| 1 | 5 | 0 | 5 |
『 l = 0 』일 때.===============
◎ i = 1 ~ ( 5 - k )까지 수행
◎ j = 1 ~ (2*k - 1)까지 수행
=======================
『 l = 1 』일 때.===============
◎ i = 1 ~ k 까지 수행
◎ j = 1 ~ (9 - 2*k)까지 수행
=======================
【 l이 0에서 1로 변화할 때 ]*************************************************
★ i의 끝값 ▶ [ 5 - k ] → [ k ] 가 되려면
5 + (-5 * l) - k + (2*k * l)
---------- ----------
▶ (5를 빼 주고, 2*k를 더해준다.)
────────────────────────────────────────────────────────────
★ j의 끝값 ▶ [ 2 * k - 1 ] → [ 9 - 2 * k ] 가 되려면
2 * k - (4*k * l) - 1 + (10 * l)
----------- -----------
▶ (-4*k를 빼 주고, 10을 더해준다.)
*************************************************************************
↓ (이 과정을 간단히 정리해 보면...)
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
[아래를 모두 실행했을 때 0 → 1로 변화하며 한번 더 반복한다.] ▶ (l = 0 ~ 1)
[아래를 모두 실행했을 때 1번씩 총 5번 개행한다.] ▶ (k = 1 ~ 5)
① 공백을 0 ~ [ 5 + (-5 * l) - k + (2*k * l) ] 까지 출력한다. ▶ (i = 0 ~ [5 + (-5 * l) - k + (2*k * l)])
② "*"을 1부터 ~ [2 * k - (4*k * l) - 1 + (10 * l) ]만큼 출력한다. ▶ (j = 1 ~ [2 * k - (4*k * l) - 1 + (10 * l)])
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
<수식 검증>
| l | k | i 끝값식: 5+(-5*l) - k + (2*k*l) | j 끝값식: 2*k - (4*k*l) - 1 + (10*l) |
├───────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
| 0 | 1 | 5+(-5*0) - 1 + (2*1*0) = 5-1 = 4 | 2*1 - (4*1*0) - 1 + (10*0) = 2-0-1+0 = 1 |
| 0 | 2 | 5+(-5*0) - 2 + (2*2*0) = 5-2 = 3 | 2*2 - (4*2*0) - 1 + (10*0) = 4-0-1+0 = 3 |
| 0 | 3 | 5+(-5*0) - 3 + (2*3*0) = 5-3 = 2 | 2*3 - (4*3*0) - 1 + (10*0) = 6-0-1+0 = 5 |
| 0 | 4 | 5+(-5*0) - 4 + (2*4*0) = 5-4 = 1 | 2*4 - (4*4*0) - 1 + (10*0) = 8-0-1+0 = 7 |
| 0 | 5 | 5+(-5*0) - 5 + (2*5*0) = 5-5 = 0 | 2*5 - (4*5*0) - 1 + (10*0) = 10-0-1+0 = 9 |
|───────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
| 1 | 1 | 5+(-5*1) - 1 + (2*1*1) = 0-1+2 = 1 | 2*1 - (4*1*1) - 1 + (10*1) = 2-4-1+10 = 7 |
| 1 | 2 | 5+(-5*1) - 2 + (2*2*1) = 0-2+4 = 2 | 2*2 - (4*2*1) - 1 + (10*1) = 4-8-1+10 = 5 |
| 1 | 3 | 5+(-5*1) - 3 + (2*3*1) = 0-3+6 = 3 | 2*3 - (4*3*1) - 1 + (10*1) = 6-12-1+10 = 3 |
| 1 | 4 | 5+(-5*1) - 4 + (2*4*1) = 0-4+8 = 4 | 2*4 - (4*4*1) - 1 + (10*1) = 8-16-1+10 = 1 |
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
(출력하지 않는 부분. 총 9줄 출력하므로 예외됨.)
| 1 | 5 | 5+(-5*1) - 5 + (2*5*1) = 0-5+10 = 5 | 2*5 - (4*5*1) - 1 + (10*1) = 10-20-1+10 =-1 |
▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤*/
for(l=0;l<=1;l++) // [아래를 모두 실행했을 때 0 → 1로 변화하며 한번 더 반복한다.] ▶ (l = 0 ~ 1)
{
for(k=1;k<=5;k++) // [아래를 모두 실행했을 때 1번씩 총 5번 개행한다.] ▶ (k = 1 ~ 5)
{
// ① 공백을 0 ~ [ 5 + (-5 * l) - k + (2*k * l) ] 까지 출력한다. ▶ (i = 0 ~ [5 + (-5 * l) - k + (2*k * l)])
for(i=1; i<=5 + (-5*l) - k + (2*k*l) ;i++)
{
System.out.print(" ");
}//end for i
// ② "*"을 1부터 ~ [2 * k - (4*k * l) - 1 + (10 * l) ]만큼 출력한다. ▶ (j = 1 ~ [2 * k - (4*k * l) - 1 + (10 * l)])
for(j=1; j<=2 * k - (4*k * l) - 1 + (10 * l);j++)
{
System.out.print("*");
}//end for j
System.out.println();
}//end for k
}//end for l
}//end for main()
}//end for class Test063
// 실행 결과
/*
*
***
*****
*******
*********
*******
*****
***
*
*/