ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 중첩 for문으로 별찍기
    Java/Java 개념 2022. 7. 6. 18:20

    중첩 for문을 통해 5가지 별찍기 문제를 해결하고자 한다.

     

    for문을 연습하기에는 별찍기가 제일 좋다고 하여, 시도하게 되었다.


    1. 간단한 2차원 배열의 별찍기

     

    public class Practice {
    
    	public static void main(String[] args) {
    		
    		for(int i=0; i<3; i++) {					// row = 3
    			for(int j=0; j<4; j++) {				// column = 4
    				System.out.print("*");
    			}
    			System.out.println();
    		}
    	}
    
    }

     

    row를 3, column을 4로 설정하고 별을 찍는 간단한 문제라, 어렵지 않았다.


    2. 삼각형 모양 별 찍기

     

    public class Practice {
    
    	public static void main(String[] args) {
    		
    		for (int i=0; i<3; i++) {				// row = 3
    			for (int j=0; j<3; j++) {			// column = 3
    				if(i>=j) {			// row >= column일 경우 별을 찍습니다.
    					System.out.print("*"); 
    				} 
    			} 
    			System.out.println();
    		}
    	}
    
    }

     

    row를 3, column을 3으로 설정한 후, row의 인덱스 번호가 column의 인덱스 번호보다 크거나 같을 때 별을 찍었다.


    3. 삼각형 모양 별 찍기 (y축 대칭)

     

    public class Practice {
    
    	public static void main(String[] args) {
    		
    		for(int i=0; i<3; i++) {					// row = 3
    			for(int j=3; j>0; j--) {				// column = 3, 2, 1 하면서 내려옴
    				if(j>i+1) {			// column이 1부터 시작하기에 i+1 적용, j가 i보다 더 크면 빈칸 찍기
    					System.out.print(" ");
    				}else{				// 그 이외에는 별 찍기
    					System.out.print("*"); 
    				} 
    			}
    			System.out.println(); 
    		}
    		
    	}
    
    }

     

    row를 3, column을 3으로 설정 후, j를 3부터 시작하여 j-- 를 진행하고, j보다 i가 더 크면 별을 찍는 구조로 설계했다.


    4. 피라미드 모양 별 찍기

     

     

    public class Practice {
    
    	public static void main(String[] args) {
    		
    		int row = 3;					// row = 3
    		  
    		for(int i=0; i<row; i++) {			// row = 3
    			for(int j=1; j<row-i; j++) {	// 빈칸 순서대로 찍기
    				System.out.print(" "); 
    			} for(int j=0; j< i*2+1; j++) {	// 별이 찍히는 개수 = i*2+1이므로 범위 설정
    				System.out.print("*");
    			}
    			System.out.println(); 
    		}
    		
    	}
    
    }

     

    피라미드는 빈칸과 별이 찍히는 부분을 집중해서 구현해 보았다.

    for문 안에 for문을 두개 넣어, 빈칸을 찍는 for문과 별을 찍는 for문을 구분하여 구현하였다.


    5. Scanner로 홀수를 입력받아 그에 맞는 다이아몬드 모양의 별 찍기

     

    import java.util.Scanner;
    
    public class Practice {
    
    	public static void main(String[] args) {
    		
    		Scanner sc = new Scanner(System.in);
    		System.out.print("홀수를 입력하세요. : ");
    		int num = sc.nextInt();				// scanner를 통해 크기를 입력 받음
    		
    		int start5 = num/2;			// 별이 찍히기 시작하는 장소
    		int end5 = num/2; 			// 별이 찍히는게 끝나는 장소
    		int middle5 = num/2;		// row, column의 중간
    		
    		for(int i=0; i<num; i++) {		// row = num
    			for(int j=0; j<num; j++) {		// column = num
    				if(j >= start5 && j <= end5) {	// j >= num/2 && j <= num/2
    					System.out.print("*");	// 별을 찍는다.
    				} else {
    					System.out.print(" ");
    				}
    			}
    			if(i < middle5) {				// i가 middle보다 작으면
    				start5 -= 1;				// start는 -1씩 내린다.
    				end5 += 1;					// end는 -1씩 올린다.
    				System.out.println();
    			} else if(i >= middle5) {		// i가 middle보다 크거나 같으면
    				start5 += 1;				// start는 +1씩 올린다.
    				end5 -= 1;					// end는 -1씩 내린다.
    				System.out.println();
    			}
    		}
    		sc.close();
    	}
    }

     

    이중포문 두개로 해결하려 했더니 솔직히 조금 많이 어려웠다.

     

    필드로 별이 찍히기 시작하는 장소(start)와 별 찍히기가 끝나는 장소(end), row와 column의 가운데인 middle을 두었다.

     

    middle을 기준으로 위, 아래를 나누어 별을 찍었으며, 시작점과 끝점을 +-1씩 해가며 별을 찍었다.

Designed by Tistory.