공부했던 자료 정리하는 용도입니다.

재배포, 수정하지 마세요.

 

 

 

 

 


for문을 활용해서 여러 가지 모양을 출력하기

 

다중  for 문을 활용한다면 여러 가지 모양을 출력할 수 있다. 출력할 모양이 어떤 규칙을 갖고 있는지 파악하는 게 가장 중요하다.

 


1. 정사각형

 

위의 그림에서 회색 부분에  * 이 출력된다고 생각하면 된다. 정사각형은 가로와 세로의 길이가 같은 사각형을 의미하므로 행( i )과 열( j )의 크기를 같게 해주면 되고, 직각 사각형은 행( i )과 열( j )의 크기가 다르므로 원하는 값으로 설정해 주면 된다. 첫 번째  for 문에 나오는  i 가 행렬의 행과 같고 두번 째  for 문의  j 가 행렬의 열과 같다고 생각하면 된다. 행( i )은 증가하면서 반복되지만 열( j )은 매 행마다 똑같은 크기만큼 반복되는 것을 확인할 수 있다.

 

 

package test;

class test{
	public static void main(String[] args) {
		
		for(int i = 0 ; i < 5 ; i++) { //5개의 줄 생성
			
			for(int j = 0 ; j < 5 ; j++) { //줄마다 5번씩 반복실행
				System.out.print("*");
			}
			
			System.out.println(); //줄바꿈
		}
	}
}

 

실행결과

 

 

 

2 - 1. 직각삼각형(왼쪽)

 

 print 문의 출력은 기본적으로 왼쪽 정렬되어서 출력된다. 그래서 왼쪽 직각삼각형 모양으로 출력하려면  * 을 하나씩 늘려서 출력하고 줄 바꿈 하면 된다. 행의 순서와 회색 부분의 개수가 똑같이 증가하므로 두 번째  for 문은 행( i )의 순서만큼  * 출력을 반복하면 된다.

 

 

package test;

class test{
	public static void main(String[] args) {
		
		for(int i = 1 ; i <= 5 ; i++) {	//5개의 줄 생성
			
			for(int j = 1 ; j <= i ; j++) {	//행의 순서만큼(첫번째 줄이면 1, 두번째 줄이면 2...)반복
				System.out.print("*");
			}
			
			System.out.println();	//줄바꿈
		}
	}
}

 

실행결과

 

 

 

2 - 2. 직각삼각형(오른쪽) 

 

오른쪽 직각 삼각형은 왼쪽 직각삼각형과는 조금 다르다. 위의 그림이 전체 공간이라고 하면 하얀 부분을 공백으로 출력하고 회색 부분을  * 로 출력해야 하는데 하얀 부분(공백)은 줄이 바뀔수록 감소하는 모양이고 회색 부분( * )은 줄이 바뀔수록 증가하는 추세이다. 눈여겨봐야 할 곳은 빨간색으로 칠해진 부분인데(저기도  * 로 출력해야 됨) 저기를 기점으로 공백과  * 이 전환된다는 점이다. 또한 오른쪽을 기준으로 했을 때 행의 순서와 일치한다는 것을 알 수 있다.

 

 

package test;

class test{
	public static void main(String[] args) {
		
		for(int i = 1 ; i <= 5 ; i++) {	//5개의 줄 생성
			
			for(int j = 5 ; j > 0 ; j--) {	//5개의 줄이므로 5에서부터 줄어들며 반복수행 (5x5)
				
				if(j > i) {	//줄의 순서(ex n번째 줄)보다 큰 경우 -> 빨간색칸 기준 왼쪽칸인 경우
					System.out.print(" ");	//공백출력
					
				}else {	//줄의 순서보다 작거나 같은경우(== 빨간색 칸을 포함해서 오른쪽칸인 경우)
					System.out.print("*");	//*출력
				}	
			}
			
			System.out.println();	//줄바꿈
		}
	}
}

 j 를 감소시켜가면서  n 번째 줄 순서보다 큰 경우(빨간색 칸 기준 왼쪽의 칸들) 공백을 출력하고,  n 번째 줄 순서보다 큰 경우(빨간색 칸을 포함해서 오른쪽의 칸)  * 을 출력한다. 한 줄의 반복이 끝나면 줄 바꿈 한다. 

 

실행결과

 

 

 

3. 마름모

 

마름모는 어떻게 출력할까 고민하다가 양쪽이 대칭으로 출력된다는 것을 알았다. 빨간 줄을 기준으로 윗부분은 흰색 부분이  3 칸부터  1 칸씩 줄어들고 회색 부분은  1 칸부터  2 칸씩 증가한다. 그리고 빨간 줄 아랫부분은 흰색 부분이  0 칸부터 시작해서  1 칸씩 증가하고 회색 부분은  7 칸부터 시작해서  2 칸씩 줄어드는 모양이다.

그래서  for 문을  3 번돌려서 흰색 → 회색 → 흰색 순으로 출력해보면 어떨까 생각했다.

 

 

package test;

class test{
	public static void main(String[] args) {
		
		int a = 1 ;	//회색칸("*")의 시작개수
		int b = 3 ;	//공백의 시작개수
		
		for(int i = 0 ; i < 7 ; i++) {	// 7개의 줄 생성
			if(i < 3) {	//빨간줄을 기준으로 윗부분일경우
				for(int j = b ; j > 0 ; j--){	//b(흰부분, 공백)의 크기만큼 반복
					System.out.print(" ");
				}
				for(int j = 0 ; j < a ; j++) {	//a(회색부분, *)의 크기만큼 반복
					System.out.print("*");
				}
				for(int j = b ; j > 0 ; j--){	//b(흰부분, 공백)의 크기만큼 반복
					System.out.print(" ");
				}
				System.out.println();	//한줄의 출력이 끝나면 줄바꿈
				
				a += 2;	//a(회색부분, *)의 크기 2증가
				b--;	//b(흰부분, 공백)의 크기 1감소
				
			}else {	//빨간줄을 기준으로 아랫부분일 경우
				
				for(int j = 0 ; j < b ; j++){	//b(흰부분, 공백)의 크기만큼 반복
					System.out.print(" ");
				}
				for(int j = a ; j > 0 ; j--) {	//a(회색부분, *)의 크기만큼 반복
					System.out.print("*");
				}
				for(int j = 0 ; j < b ; j++){	//b(흰부분, 공백)의 크기만큼 반복
					System.out.print(" ");
				}
				System.out.println();	//한줄의 출력이 끝나면 줄바꿈
				
				a -= 2;	//a(회색부분, *)의 크기 2감소
				b++;	//b(흰부분, 공백)의 크기 1증가
				
			}
		}
	}
}

 

실행결과

'Back end > Java 문제' 카테고리의 다른 글

[Java] 배열 정렬(sort)  (0) 2019.07.03
[Java] 총합, 평균, 최대, 최소  (0) 2019.06.26
[Java] Up&Down 게임  (0) 2019.06.18
[Java] 문자열이 숫자인지 판별 (isDigit())  (0) 2019.06.14
[Java] 구구단  (0) 2019.06.13

+ Recent posts