hhyyyjun 2022. 12. 31. 23:35

입력 값 3을 받아

*

***

*****

위와 같은 값의 별 그리기

1 미만의 값을 입력 받으면 다시 입력하도록 해야한다.

디버깅표

값 3이 입력 되었을 때 각 조건에 따라 별이 찍힐 수 있도록 조건식을 만들어보았다. 이를 코드에 적용

내가 작성한 코드

package test;
import java.util.Scanner; //import
public class Test {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in); //입력을 위한 함수
		System.out.print("값을 입력하세요 : ");

		while(true) { //조건식이 항상 참으로써 무한루프 발생
			int num = sc.nextInt(); //정수 값 입력
			if(num<1) { //만약 입력 값 num이 1 미만일 때
				System.out.println("입력 값 1 이상으로 입력해주세요!");
				continue; //값을 1 미만으로 입력했을 때 다시 while문 상단으로 이동
			}
			else if(num>=1) { //정수 값을 1이상으로 입력했을 때 명령 수행
				for(int i = 1;i<=num;i++) { //i가 입력 값 num이하까지 반복 명령 수행
					for(int j = 1;j<i*2;j++) { //j가 i*2까지 반복 명령 수행
						for(int k=1;k<=num-i*j;k++) { //k가 num-i*j까지 반복 명령 수행
							System.out.print(" ");
						}
						System.out.print("*");							
					}
					System.out.println(); //줄바꿈
				}break; //명령 수행 반복 후 루프 탈출
			}
		}
	}
}

결과 값이 잘 나온 것을 확인할 수 있다.

하지만, 더 큰 값을 입력했을 때도 결과가 잘 나오는지 확인해보았다.

사진과 같이 값이 5가 넘어가는 순간 조건식에 오류가 있음을 알게되었다.

정답 풀이

3중첩 반복문이 아닌 2중첩에 병렬로 for문이 배치된 것을 확인하였고, 병렬 첫 for문에서 먼저 조건식에 따라 내가 입력한 값 이하까지 공백이 입력되도록 하였고,

병렬 두번째 for문에서 (2*i)-1 조건식을 통해 별이 2개씩 늘어나도록 하였다.