본문 바로가기
Java

[백준] 코딩테스트 문제 2444: 별 찍기 - 7

by 리슈다 2026. 2. 24.

https://www.acmicpc.net/problem/2444

import java.io.*;
public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        for(int i = 1; i <= n; i++){
            for (int j = n; j > i ; j--){
                System.out.printf("%s", " ");
            }
            for(int m = 0; m < (2 * i - 1); m = m + 1){
                System.out.printf("%s", "*");
            }
            System.out.println();
        }
        for(int i = 1; i < n; i++){
            for(int j = 0; j < i ; j++){
                System.out.printf("%s", " ");
            }
            for(int m = (2 * n - 2); m > 2 * i - 1 ; m--){
                System.out.printf("%s", "*");
            }
            System.out.println();
        }
    }
}

진짜 싫어하는 별 찍기 문제

왜 싫냐면 내가 못해서.

반복문 2개 이상 나오면 머리가 터져버릴 것 같다.

정답 맞히는 것만 신경 쓰고 효율이나 가독성은 하나도 신경 안 쓰는 바람에 코드가 좀 더러움

printf 대신 그냥 print 써도 되고, StringBuilder에 append 써서 출력문은 반복문 끝나고 한 번에 출력해도 될 듯

내가 당장 고치기엔 귀찮아서 구상만 해놓고 지피티한테 맡겨봤음

 

import java.io.*;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        StringBuilder sb = new StringBuilder();

        // 위쪽 (1 ~ n)
        for (int i = 1; i <= n; i++) {
            int spaces = n - i;
            int stars = 2 * i - 1;

            for (int s = 0; s < spaces; s++) sb.append(' ');
            for (int s = 0; s < stars; s++) sb.append('*');
            sb.append('\n');
        }

        // 아래쪽 (1 ~ n-1)
        for (int i = 1; i <= n - 1; i++) {
            int spaces = i;
            int stars = 2 * (n - i) - 1;   // = 2n - 2i - 1

            for (int s = 0; s < spaces; s++) sb.append(' ');
            for (int s = 0; s < stars; s++) sb.append('*');
            sb.append('\n');
        }

        System.out.print(sb);
    }
}

위가 지피티, 아래가 나

append 쓴다는 게 사실 이 정도로 쓴다는 건 아니었는데..

그리고 반복문 안에 변수를 밖으로 빼서 훨씬 간결하게 표현했다.

메모리랑 시간도 눈에 띄게 줄어들었다.