[백준] 2444 별 찍기 -7 JAVA

·2024년 2월 29일

1일1백준 -Java-

목록 보기
16/60

문제

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

입력

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

출력

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

예제 입력

5

예제 출력

    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *

내가 했던 풀이 방법

  1. 왼쪽 위 / 오른쪽 위 / 왼쪽 아래 / 오른쪽 아래로 나누어 풀이
  2. input(입력받은 수)보다 height index(세로 index)가 클 때, 작을 때로 나누어 풀이
  3. width index(가로 index)가 input(입력받은 수)일 때, 보다 작을 때, 클 때로 나누어 풀이

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int input = Integer.parseInt(br.readLine());

        for(int i=1; i<2*input; i++) {
            if(i<=input) {
                for(int j=1; j<2*input; j++) {
                    if(j==input) {
                        System.out.print("*");
                    } else if (j<input){
                        if(input-i+1>j) {
                            System.out.print(" ");
                        } else {
                            System.out.print("*");
                        }
                    } else {
                        if(input-i+1>(2*input)-j) {
                        } else {
                            System.out.print("*");
                        }
                    }
                }
            } else {
                for(int j=1; j<2*input; j++) {
                    if(j==input) {
                        System.out.print("*");
                    } else if(j<input){
                        if(i-input > j-1) {
                            System.out.print(" ");
                        } else {
                            System.out.print("*");
                        }
                    } else {
                        if(i-input > 2*input-1-j) {
                        } else {
                            System.out.print("*");
                        }
                    }
                }
            }
            System.out.println();
        }
    }   
}

이 코드에서 놓치기 쉬운건 예제 출력에서 별의 뒷부분이 존재하지 않는다. (별의 뒷부분에 " "을 넣지 않는다는 것이다.) 이 경우 제출 형식 오류가 뜨니 주의할 것.

회고

백준에 시도했으나 틀린 문제가 있길래 해결하고자 풀어본 문제.
코딩을 시작할 때부터 별 찍기는 참 안 익숙해지고, 규칙도 잘 안 떠오르는 편이다.
이번에는 절대 구글링을 하지 않고 스스로의 노력으로 풀어야지 다짐해서 혼자 해결해봤다. (그렇기 때문에 코드가 안 깔끔할 수 있고, 이거보다 좋은 알고리즘 있을 수 있음)
최근 풀어본 백준 중에 조금 어려운 편이었다. 그래봤자 30분밖에 안 걸렸던 문제지만..
다음 문제도 구글링하지 않고 스스로 풀어보면 언젠가 답을 찾겠지...!

profile
Frontend🍓

0개의 댓글