코딩테스트/백준

[백준 JAVA] 2444 - 별 찍기 - 7

kittae 2024. 11. 25. 13:15

 

간단한 별 찍기 응용 문제다!

사실 브론즈 3 문제라 옛 기억에 코웃음치며 도전했지만, 생각보다 머리를 써야 풀 수 있었다. 

 

시간초과와 메모리는 상관 없는 문제로 판단했다. 섣불리 바로 풀기보단, 먼저 주석코드로 어떻게 풀지에 대해 생각을 했다.

 

/*
* 만약 5라면, 총 출력은 2 * n - 1개임
* n이 최대 별의 개수는 2*n-1
* 1. 3중 for문으로, 첫 for문은 전체 갯수를 의미함
* 2. j = n - i; -> " " 출력
* 3. k = 2*n-1까지 "*" 출력
* 4. l = n - i; -> " " 출력
* 5. 다시, 반대로,
* */

먼저 내가 푼 코드이다.

 

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 - i; j > 0; j--)
                System.out.print(" ");

            for (int k = 0; k < (2*i)-1; k++)
                System.out.print("*");

            for (int l = n - i; l > 0; l--)
                System.out.print(" ");

            System.out.println();
        }

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

            for (int j = 1; j < (2+i)-1; j++)
                System.out.print(" ");

            for (int k = (2*(n-i)-1); k > 0; k--)
                System.out.print("*");

            for (int l = 1; l < (2+i)-1; l++)
                System.out.print(" ");

            System.out.println();
        }
    }
}

 

입력 형식도 맞고 출력 형식에 맞게 결과도 잘 나와서 나름 잘 풀었다고 생각했다. 하지만,,

왜지..?

 

확인해보니, 마지막에 공백을 추가하는 코드때문에 출력 형식이 잘못 된 거였다!

 

최종코드

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 - i; j > 0; j--)
                System.out.print(" ");

            for (int k = 0; k < (2*i)-1; k++)
                System.out.print("*");

            System.out.println();
        }

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

            for (int j = 1; j < (2+i)-1; j++)
                System.out.print(" ");

            for (int k = (2*(n-i)-1); k > 0; k--)
                System.out.print("*");

            System.out.println();
        }
    }
}

 

유레카,,

 

배운점

문제를 꼼꼼히 읽어도 이런 실수를 하게 되었다. 결과가 맞더라도 이런식으로 오류가 떴을 때, 다시한번 차분히 생각해보고 코드 모듈화를 진행하면서 문제점을 찾아야겠다!