코딩/알고리즘, cordingTest

Java로 별찍기 알고리즘 풀어보기: 반복문과 조건문의 활용 삼각형, 마름모

LoGinShin 2024. 1. 18. 15:52
반응형

 
 


 
 
코딩을 처음 시작할 때 알고리즘과 효율을 이해하기 위해 거치는 관문 중 하나인 '별 찍기'를 해보겠습니다.
찍어볼 별은 밑에 사진과 같습니다.
 

 
 
 
1.2.3번은 누구나 쉽게 작성할 수 있습니다.
하지만 4번과 5번은 1,2,3번의 응용이 필요하고 생각도 필요합니다.
 
 

1번

① 첫 번째 패턴은 가장 기본적인 형태로, 별(*)을 일정한 갯수만큼 가로로 나열하는 것입니다.

for (int i = 1 ; i <= 3 ; i++) {
    for (int j = 1 ; j <= 4 ; j++) {
        System.out.print('*');
    }
    System.out.println();
}

 
 
 

2번

② 두 번째 패턴은 i만큼 별을 출력하는 것입니다. i가 증가함에 따라 별의 개수도 증가합니다.

for (int i = 1 ; i <= 3 ; i++) {
    for (int j = 1 ; j <= i ; j++) {
        System.out.print('*');
    }
    System.out.println();
}

 

 

 

 

 3번

③번째 패턴은 공백을 이요하여 별을 오른쪽 정렬하는 패턴입니다. 공백의 갯수는 층수가 증가함에 따라 줄어들며, 별의 개수는 층수가 증가함에 따라 늘어납니다. 이를 구현한 코드는 아래와 같습니다.

for (int i = 1 ; i <= 3 ; i++) {
    for (int j = 3 ; j > i ; j--) {
        System.out.print(' ');
    }
    for (int k = 0 ; k < i ; k++) {
        System.out.print('*');
    }
    System.out.println();
}

 
 

 

 

 

4번

④번째 패턴은 정삼각형 모양의 별찍기 패턴입니다. 이는 공백과 별을 적절히 조절하여 모양을 만들어내는 것이 핵심입니다.

 

for (int i = 1 ; i <= 3 ; i++) {
    for (int j = 3 ; j > i ; j--) {
        System.out.print(' ');
    }
    for (int k = 0 ; k < i * 2 - 1 ; k++) {
        System.out.print('*');
    }
    System.out.println();
}

 

 

 

 

 

 

 5번

⑤번째 패턴은 if문을 사용하여 층수에 따라 별 찍기 모양이 변하는 패턴입니다. 1층부터 3층까지는 증가하는 피라미드, 4층 부터는 감소하는 피라미드를 출력합니다.

for (int i = 1 ; i <= 5 ; i++) {
    if (i <= 3) {
        for (int j = 3 ; j > i ; j--) {
            System.out.print(' ');
        }
        for (int k = 0 ; k < i * 2 - 1 ; k++) {
            System.out.print('*');
        }
    } else {
        for (int j = 3 ; j < i ; j++) {
            System.out.print(' ');
        }
        for (int k = i * 2 - 1 ; k <= 9 ; k++) {
            System.out.print('*');
        }
    }
    System.out.println();
}

 
다른 별찍기와 다르게 if문을 사용하여 층수에 따라 출력하는 별의 패턴을 변경하고 있습니다.
 
 

 

 

전체 코드


import java.util.Scanner;

public class HomeWork {

public static void main(String[] args) {
	// ①
	int i;
	int j;
	int k;
	System.out.println('①'); 	//1번문제
	for (i = 1 ;i<=3 ;i++) {	//i를 1부터 3보다 작거나 같을때 증가시키고 실행
		for(j =1;j<=4;j++ ) {	//i가 1일때 j를 1부터 4보다 작거나 같을때 증가, i가 2일때 j를 ...
		System.out.print('*'); //별
		}
		System.out.println(); //j에 의해서 *이 4번 추가되고 해당 코드에 의해 개행된다.
	}
	
	System.out.println('②');	//2번문제표시
	
	for (i = 1 ; i<= 3 ;i++ ) {
		for (j=1;j<=i ;j++) {
			System.out.print('*');
		}
		System.out.println();
	}
	
	System.out.println('③'); //공백이 1층일때2개 2층일때 1개 3층일때 0개
	for(i=1;i<=3 ;i++) {
		for(j=3 ;j>i ;j-- ) {
		System.out.print(' '); //공백 작성
		}
		for( k=0;k<i ;k++ ) {
			System.out.print('*');
		}
		System.out.println();
	}
	
	System.out.println('④');
	for(i = 1; i <=3; i++) {
		for (j =3;j>i ;j-- ) {
			System.out.print(' ');
		}
		for(k = 0;k<i*2-1;k++) {
			System.out.print('*');
		}
		System.out.println();
	}
	
	System.out.println('⑤'); //if문을 사용해 보도록 하겠습니다
	
	for (i = 1; i<=5;i++) { //1층 ~ 5 층
		if (i <=3) {		//1층부터 3층까지는 증가하는 피라미드
			for(j=3;j>i;j--) {
				System.out.print(' ');
			}
			for(k=0;k<i*2-1;k++) {
				System.out.print('*');
			}
			System.out.println();
			
		} else if(i>3) {			//4~5층
			for(j=3;j<i;j++) {
				System.out.print(' ');
			}
			for(k=i*2-1;k<=9;k++) {
				System.out.print('*');
			}
			System.out.println();
		}
	}
	
	//어려워서 실패... 그룹스터디 진행
//		char s= '';
//		Scanner sc = new Scanner(System.in);	//		필요할때 사용해야한다 판단 스캐너 선언
//		System.out.println('⑥');
//		System.out.println("floor : (just, Odd Numbe)");
//
//		int floor = sc.nextInt(); //정수값 받기
//
//		for(i=1 ;i<=floor ;i++ ) {		// 층 수 증가
//			if(i>floor/2) {
//				System.out.println(sfloor);
//			}
//		}

}

 
 
궁금하신점 있다면 댓글 남겨주세요 ㅎㅎ

728x90
반응형