본문 바로가기
Programming/Java

반복문을 이용한 별만들기

by 공부합시다홍아 2023. 10. 31.
 

[JAVA] 제어문

제어문 조건문 / 반복문 / 탈출문 조건문 특정 조건을 만족할 때 실행할 문장을 작성하는데 사용한다. 조건문 if ~ else if문은 프로그램의 흐름을 바꾸는데 사용되는 조건 선택 분기문입니다. if문

hong-study.tistory.com


사각형 별만들기
for(int i =1; i<=star; i++) {
	for(int j=1; j<=star; j++) {
		System.out.print("*");
	}
    System.out.println("");
}

첫번째 반복문 : 행
두번쨰 반복문 : 열

첫 번째 반복문이 한차례 동작할 때 
두 번째 반복문이 star(5)만큼 실행하여 * 을 찍어주게 된다.
>> 이러면 첫번째 줄이 완성되고, 

위 작업이 끝난이후 첫 번째 반복문이 다시 5번까지 실행하기 때문에
위 그림과 같은 모양이 출력된다.

한쪽으로 치우친 별만들기
int star = 5;
		
for(int i=1; i<=star; i++) {
	for(int j=1; j<=i; j++)
	{
		System.out.print("*");
		}System.out.println("");
	}
}

첫 번째 반복문이 한 차례 동작할 때
두 번째 반복문이 동작할 때 첫 번째 반복문의 동작 횟 수만큼 동작하도록 한다. 

그렇게 지정을 하면
첫 번째 반복문이 한 번 동작할 때, 두 번째 반복문도 한 번 동작하여 한 개의 * 을 출력하게 된다.

star 가 5를 가지고 있기 때문에, 첫 번째 반복이 5번 실행되는 동안 두 번째 반복문도 순차적으로
다섯번까지 실행하게 된다.

거꾸로 치우친 별만들기
for(int i=1; i<=star; i++) {
	for(int j=1; j<=(star+1)-i; j++) {
		System.out.print("*");
	}
    System.out.println("");
}

첫 번째 반복문이 동작할 때, 두 번째 반복문도 동일하게 동작하지만,
거꾸로 출력을 하기위해서는 5,4,3,2,1 과 같은 순서를 가져야한다.

다중 for문에 대해 설명을 다시하면
for(int i =1; i<=5; i++){
    for(int j = 1; j<=2; j++)
}
과 같은 그림에서 
첫 번째 반복문이 실행되는 동안 최대 2의 범위를 가지는 두 번째 반복문은
두 번 실행되게 된다. 
첫번째 반복문 : 1회 동작 / 두 번째 반복문 : 2회동작
첫번째 반복문 : 2회 동작 / 두 번째 반복문 : 2회동작 

위 처럼 동작하게 되기 때문에 

거꾸로 최대 별 수를 출력하기 위해서는 
기존 star 값에서 1을 더하고, 첫번째 반복문이 실행된 횟 수만큼 빼줘야
최대 별이 첫번째 출력물에 쌓이게 된다. 

반복을 할 수록 i값은 커지기 때문에 위와 같은 결과를 가지게 된다.

피라미드 별만들기
for(int i=1; i<=star; i++) {
			
	for(int j=1; j<=star-i; j++) {
		System.out.print(" ");
	}
	for(int k=1; k<i*2; k++) {
		System.out.print("*");
	}
	System.out.println("");
}

피라미드 별을 만드는 방법을 쉽게 설명을 하면

거꾸로 작아지는 별 출력물과, 순서대로 커지는 출력물을 하나로 합친다라고 생각하면 된다.
더 쉽게 설명하면, " " 공백이란 문자가 한 쪽으로 치우친 별들을 옆으로 민다고 생각하면 된다.

위 코드를 보면
첫 번째 행을 담당하는 반복문 속에 
공백과 별을 찍어주는 열을 담당하는 반복문을 입력하면 된다. 

기존 별 찍기와 동일하게 첫 번째 반복문은 star만큼 동작을 하고, 
첫 번째 반복문이 한 번 동작할 때 
공백을 찍어주는 반목문과 별을 찍어주는 반복문이 범위만큼 동작한다고 보면 된다. 

첫 번째 줄에 별이 하나고, 공백이 네개가 존재한다. 
이렇게 출력하기 위해서는 공백의 범위를 행의 범위에서 행의 반복횟 수만큼 차감시키면 
그 수만큼 공백이 발생하게 된다. 

별은 홀수로 출력이 되기 때문에, 첫 번째 반복 횟 수의 2배미만의 범위를 지정하여
1, 3, 5, 7...이 출력되도록 한다. 

그렇게 출력을 하면 
행의 첫 번째 반복시 공백은 4개 / 별은 1개가 출력이 되고 
행의 두 번째 반복시 공백은 3개 / 별은 3개가 출력이 된다. 
이렇게 행의 범위만큼 반복을 하게되면, 위와 같은 피라미드가 출력되게 된다.

중간에 빈공백을 가진 별 만들기
import java.util.Scanner;

public class test02 {

	public static void main(String[] args) {

		// 가로, 세로르 입력받음
		// 가로 길이, 세로 길이의 사각형 출력
		// 단, 윤관만 나타나도록 처리

		Scanner sc = new Scanner(System.in);

		System.out.print("가로 : ");
		int a = sc.nextInt();
		System.out.print("세로 : ");
		int b = sc.nextInt();

		for (int i = 1; i <= a; i++) {

			for (int j = 1; j <= b; j++) {
			
				if(i>1 && i<a && j>1 && j<b ) {
					System.out.print(" ");
				}else {
					System.out.print("*");
				}
			}
			System.out.println("");
		}
	}

}

728x90

'Programming > Java' 카테고리의 다른 글

[JAVA] 탈출문  (1) 2023.11.01
[JAVA] 소수(Prime Number) 구하기  (1) 2023.10.31
[JAVA] 배열  (0) 2023.10.30
[JAVA] 제어문  (0) 2023.10.26
[JAVA] 배열과 입력  (2) 2023.10.26