본문 바로가기
백준

[백준] 10991번 : 별 찍기 - 16 – JAVA [자바]

by Hongwoo 2022. 8. 1.
반응형

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

 

10991번: 별 찍기 - 16

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

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 10991번 별 찍기 - 16은 브론즈 3 난이도의 구현 문제이다. 이 문제는 별 찍기 문제이다. 이런 유형의 문제들은 패턴을 찾는 게 중요하다.

 

예를 보면서 패턴을 찾아보겠다.

 

   *
  * *
 * * *
* * * *

 

이런 유형의 별 패턴이다. 우선, 맨 윗줄 가운데에 *이 있다. 그리고 윗줄에 *이 있으면 아랫줄 왼쪽과 오른쪽도 *이 위치한다.

 

따라서 이 문제는 2차원 배열을 이용해서 풀었다. 우선 char형 배열 arr을 [n][2n - 1]의 크기로 선언해준다. 그리고 첫 줄 가운데에 *이 위치하므로, arr [0][n-1] = *로 초기화해준다.

 

그리고 for-loop을 돌려 윗줄에 *이 있으면 아래줄 왼쪽과 오른쪽에도 *을 넣어준다. 그리고 마지막에 출력만 해주면 된다.

 

자세한 코드는 밑에 있는 코드를 참고하면 되겠다.

 


  • 코드

 

import java.io.*;
import java.util.*;

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());
        char[][] arr = new char[n][2*n-1];
        StringBuilder sb = new StringBuilder();
        arr[0][n-1] = '*';  //첫 줄 별은 중간에 위치한다
        for (int i = 0; i < n-1; i++) {
            for (int j = 0; j < arr[i].length-1; j++) {
                //윗줄에 *이 있으면 아래줄 왼쪽과 오른쪽도 *이다
                if (arr[i][j] == '*') {
                    arr[i+1][j-1] = '*';
                    arr[i+1][j+1] = '*';
                }
            }
        }
        for (int i = 0; i < n; i++) {
            int count = 0;
            for (int j = 0; j < arr[i].length; j++) {
                if (arr[i][j] == '*') {
                    sb.append("*");
                    count++;
                } else {
                    sb.append(" ");
                }
                if (count == i+1) break;
            }
            if (i == n-1) break;
            sb.append("\n");
        }
        System.out.print(sb);
    }
}

 

 

반응형

댓글