본문 바로가기

JAVA/국비 공부

3월8일 수업(별찍기08)

package day0308;

//별찍기 8번
import java.util.Scanner;
public class StarsPrint08 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        
        System.out.println("별찍기 8번");
        System.out.println("출력 줄 수 입력");
        System.out.print(">");
        int userNumber = scanner.nextInt();
       
                
        for (int i = 1; i <= 2 * userNumber - 1; i++) {
            String stars = new String();

            if (i < userNumber) {
                // 윗부분

                // 공백을 담당하는 j for 문

                for (int j = 1; j <= userNumber - i; j++) {
                    stars += " ";
                }

                // 별을 담당하는 j for문
                for (int j = 1; j <= i; j++) {
                    stars += "*";
                }

            } else {
                // 아랫부분
                // else에 왔다는 것은
                // i 가 userNumber보다 크거나 같다라는 이야기이다.
                // 즉, userNumber가 5일때
                // i가 5~9는 여기로 들어오게 된다!

                // 하지만 기존의 우리 j for문은 항상
                // i가 1~5의 기준으로 진행이 됬었다.
                // 그렇기 때문에 기존 j for 문을 그대로 쓰면?
                // 모양이 일그러지게 된다!

                // 그 상황에선 우리가 두가지 해법이 있다.

                // 1. 여기 else 로 들어오는 i 를 기준으로 해서
                // j for문의 내용을 고친다.
                // 공백을 담당하는 j for 문
                for (int j = 1; j <= i - userNumber; j++) {
                    stars += " ";
                }
                // 1번의 단점은, 코드가 매우 복잡해진다. 그리고 기존에 썼던 j for문을 거의 새로 만드는것과 똑같다.

                // 2. else 에서 쓸 1부터 시작하는 새로운 변수를 만들어서 i와 userNumber로
                // 1, 2, 3, .... userNumber까지 증가 되게 만들어서
                // j for문에서 활용해준다!

                int lowerI = i - userNumber + 1;

                // 별을 담당하는 j for 문
                for (int j = lowerI; j <= userNumber; j++) {
                    stars += "*";
                }
                // 2번의 단점은 우리에게 허락된 메모리가 48kb이고 그리고 우리 메모리가 다 쓰게 되면 우주선이 터지기 때문에 변수를 마음껏 못만든다 ->
                // 우린 이 세대가 아님.
            }

            System.out.println(stars);
        }

        scanner.close();

    }

}

'JAVA > 국비 공부' 카테고리의 다른 글

3월8일수업(별찍기10)  (0) 2021.03.08
3월8일수업(별찍기09)  (0) 2021.03.08
3월8일(별찍기07)  (0) 2021.03.08
3월8일(별찍기06)- HARD  (0) 2021.03.08
3월8일수업(별찍기06)-easy  (0) 2021.03.08