☕️자바 𝗝𝗔𝗩𝗔

[java] 자바 별찍기 모래시계 찍기

비타민찌 2022. 11. 8. 11:49
728x90

[방법 1]

public static void main(String[] args) {
        int size = 4;

        for (int i = 0; i < size * 2 - 1; i++) {
            if (i < size) {
                for (int k = 0; k < i; k++) {
                    System.out.print(" ");
                }
                for (int j = 7; j > i * 2; j--) {
                    System.out.print("*");
                }
                System.out.println();
            }
              
              else {
                for (int j = 0; j < 2 - (i - 4); j++) {
                    System.out.print(" ");
                }
                for (int k = 0; k < 2 * (i - 3) + 1; k++) {
                    System.out.print("*");
                }
                System.out.println();
            }
        }
}

위 아래가 대칭인 모래 시계 모양 때문에, 우선 시작되는 역삼각형의 단을 활용해서 아래를 반복 시켰다.

* * *

 * *

  *

 * * (여기가 반복)

* * * (여기가 반복)

 

그래서 첫번째 반복문 즉 단을 만들어 주는 반복문에서 size*2-1 만큼 반복한다.

그리고 i 즉 단 수가 size 보다 작을 경우 위의 if 문이 실행되고, 큰 경우 아래 else문이 실행된다.

 

하지만 아쉬운 점이 많은 코드라, v2에서는

단 수 전체 길이를 size라는 변수로 잡고, size를 Scanner 로 입력받고, 반복되는 코드를 조금 더 줄였다.

 

[방법2]

public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int size = sc.nextInt();
        int mid = size/2;
        
        System.out.println("size: " + size);
        System.out.println();

        for (int i = 0, j = 0; i < size; i++) {
                for (int k = 0; k < size - j; k++) {
                    if (k<j){
                        System.out.print(" ");
                    } else {
                        System.out.print("*");
                    }
                }

                if (i<mid){
                    j++;
                } else {
                    j--;
                }
            System.out.println();
        }
}

 

if (i<mid){
	j++;
} else {
	j--;
}

단 수가 중간보다 작을 때까지는 j++ 해주고

그 외에는 (여기서는 i가 4와 같거나 i가 4보다 커지면) j-- 해준다.

이 j를 활용해서

 

*이 7 일때 " " 0,

*이 5 일때 " " 1,

*이 3 일때 " " 2,

*이 1  일때 " "3, 를 반복문으로 만들었다.

 if (k<j){
	System.out.print(" ");
	} else {
	System.out.print("*");
	}
}

 

[방법3]

위 문단을 아래와 같이 삼항연산자로 바꿔주면 코드가 더 단축된다.

 System.out.print((k<j) ? " " : "*");
728x90