[백준] 10994 별 찍기 - 19 JAVA

·2024년 3월 19일

1일1백준 -Java-

목록 보기
41/60

문제

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

입력

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

출력

첫째 줄부터 차례대로 별을 출력한다.

예제 입력

3

예제 출력

내가 했던 풀이 방법

  1. height가 홀수일 때, 짝수일 때로 나눈 후 그 안에서 if문을 추가하여 풀이 -> 실패. 새로운 박스를 생성하지 못함.
  2. box 변수를 두어 사각형이 만들어질 때마다 증가시켜 새로운 박스를 생성 -> 실패. 한 줄씩 출력하므로 중간 이후부터 오류 발생 (한 줄씩 출력하는 걸론 무리일 것이라 판단하기 시작)
  3. 큰 사각형을 그린 후, 다음으로 큰 사각형을 그리도록 함 -> 성공

사각형을 그릴 때, 윗줄 아랫줄 양옆을 순서대로 그려준다 생각하고, for문을 돌리면 됨.
(※ for문에서 i는 그려야하는 사각형(입력받은 숫자) 갯수를 의미하고, j는 line을 의미한다. i가 세로, j가 가로라고 오해하면 안 됨. j는 가로도 될 수 있고, 세로도 될 수 있음)
배열을 WH 크기로 하니까 헷갈려서 WH+1로 두었지만, WH로 계산해도 됨.

코드

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

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

        int WH = 1;
        for(int i=1; i<number; i++) {
            WH += 4;
        }

        char[][] array = new char[WH+1][WH+1];
        for (int i = 0; i <=WH; i++) {
            Arrays.fill(array[i], ' ');
        }

        int Nbox = 1;
        for(int i=1; i<=number; i++) {
            for(int j=Nbox; j<=WH+1-Nbox; j++) {
                array[Nbox][j] = '*';
                array[WH+1-Nbox][j] = '*';
                array[j][Nbox] = '*';
                array[j][WH+1-Nbox] = '*';
            }
            Nbox += 2;
        }

        for(int i=1; i<=WH; i++) {
            for(int j=1; j<=WH; j++) {
                System.out.print(array[i][j]);
            }
            System.out.println();
        }
    }
}

회고

100% 스스로 생각한 문제는 아니고, 2시간 가까이 한 줄 출력을 하다보니 이 방법은 정말 아닌 것 같다는 생각이 들어 찾아본 결과 재귀를 이용해서 많이들 풀더라. 하지만, 내가 후에도 이 문제를 풀게 될 때 생각날 것 같은 방식이 아니길래 다른 방법을 찾아보니 위/아래/옆을 그려주자라는 게 보여서 그 방법을 이용해봤다. 그 방식이랑 내 방식이 같은 건지는 모르겠지만, 잘 나온거 보니 이대로 풀이하는 게 맞는 것 같다.

이 부분부터는 완전 사족.
다음주쯤부터 JS로 풀이하려고 공부를 하고 있는데 아무래도 오래 풀이해본 자바보다는 활용하는 게 더딜 것 같다는 생각이 들어서 (JS는 심지어 레퍼런스도 많지 않으니) JS 풀이 초반에는 쉬운 문제로 풀어야겠다고 결정했다. 하지만, 다음달까지 골드를 목표로 하는데 브론즈 문제를 풀 수는 또 없고, 그렇다고 계속 실버5 문제를 풀자니... 느릿느릿될 것 같아서 자바로 푸는 동안은 실버4를 풀이해서 어느정도 예상속도를 맞춰가려고 함. 근데 첫 실버4부터 어려움.

profile
Frontend🍓

0개의 댓글