Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

Everything has an expiration date

063 - Java 과제 5-4 : 반복문 for문을 이용해 별 문자를 여러 모양으로 출력하는 프로그램 (다이아몬드) 본문

[Java]/과제

063 - Java 과제 5-4 : 반복문 for문을 이용해 별 문자를 여러 모양으로 출력하는 프로그램 (다이아몬드)

Jelly-fish 2023. 9. 1. 13:26
package 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

// 실행 결과
    
/*

    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *
 
*/