Algorithm/백준

별 찍기-19 Java

whyWhale 2020. 12. 12.

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

 

10994번: 별 찍기 - 19

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

www.acmicpc.net


먼저 n이 무엇과 관련이 있을까 생각해보면 각 별이 출력되는 line과 관련 됨을 알 수 있다.

n=2이면 5줄

n=3이면 9줄

1 ,5 ,9, 13 .....   4씩 차이가 나는 것을 알수 있다. 그러면 등차수열로 인하여 1+4(n-1) 등식이 나오고 4n-3개의 줄이 출력이 된다. 그리고 난후 별들의 각 라인을 출력하는 규칙이 있나 생각해보았지만 엄청나게 장황한 코드가 나와버렸다.if 문이 난무하고 조금은 지저분한 코드가 나왔다. 가만보니 규칙이 존재하는 것 같아 보이는게 n이 1씩 늘어갈 수록 n-1에서 출력된 *들에 겉에 애워싸는 형식으로 둘러싸여 있음을 발견하였다. 

 

 

 

 

package Al_Study.set0_APPENDIX_별찍기;

import java.util.Scanner;

public class Star_19 {

    static char star[][];

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        n = 4 * n - 3; //가로 세로의 출력
        star = new char[n][n];

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                star[i][j] = ' ';
            }
        }

        Star_19(0, n);

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                System.out.print(star[i][j]);
            }
            System.out.println();
        }
    }

    public static void Star_19(int s, int len) {
        if (len<=s) return;

        for (int i = s; i < len; i++) {
            star[s][i] = '*'; //맨 위 가로줄
            star[len - 1][i] = '*'; //맨 아래 가로줄
            star[i][s] = '*'; //왼쪽 세로줄
            star[i][len - 1] = '*'; //오른쪽 세로줄
        }


        // 별을 좌표라고 생각할 때 겉테두리의 사각형과 가장 근접한 사각형을 보았을 때 2만큼의 차이가 난다
        Star_19(s + 2, len - 2);
    }
}

'Algorithm > 백준' 카테고리의 다른 글

영우는 사기꾼?  (0) 2022.11.15
BOJ1931_회의실 배정  (0) 2021.10.24
PS 관련 유입 경로  (0) 2021.03.27
백준__2229번 : 조 짜기 (골드 5)  (0) 2021.01.05
별 찍기 - 11 Java  (0) 2020.12.12

댓글