자바/알고리즘 문제 풀이

백준/2444 별찍기 -7

backend dev 2022. 10. 28.

별 찍기 - 7 

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 128 MB 28768 20208 18246 71.854%

문제

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

입력

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

출력

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

예제 입력 1 복사

5

예제 출력 1 복사

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

 

 

2444번: 별 찍기 - 7

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

www.acmicpc.net


결과를 저장하려고 해서 고생했고

뒷부분까지 공백을 주려고해서 고생했다.

1. Arrays.fill을 이용.

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

        int input = Integer.parseInt(br.readLine());

        char[][] result = new char[input*2-1][input*2-1];

        for (int i = 0; i < input*2-1; i++) {
            Arrays.fill(result[i],'*');
        }

        for(int i=1;i<input;i++)
        {
            Arrays.fill(result[i-1],0,input-i,' ');
            Arrays.fill(result[i-1],input-1+i ,input*2-1 ,'1'); // 뒤에도 공백을 넣어줘서 별을 다른 문자로 치환하려고 했던부분,정답출력은 뒷부분 공백을 출력안해서, 1로 바꿔서 1은 출력안되게끔했다.
        }

        for (int i = input; i < input * 2 - 1; i++) {
            Arrays.fill(result[i],0,i-input+1,' ');
            Arrays.fill(result[i],(input*2-1)-(i-input)-1  ,input*2-1 ,'1'); // 뒤에도 공백을 넣어줘서 별을 다른 문자로 치환하려고 했던부분,정답출력은 뒷부분 공백을 출력안해서, 1로 바꿔서 1은 출력안되게끔했다.
        }

        for(int i=0;i<input * 2 - 1;i++)
        {
            for(int j=0;j<input * 2 - 1;j++)
            {
                if(result[i][j] != '1') // null값이 아니라면
                {
                    bw.write(result[i][j]+"");
                }
            }
             if(i != input*2 -2 )
             {
                 bw.newLine();
             }
        }








        bw.flush();
        bw.close();


    }

2. 참고 , StringBuilder 이용

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());
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n-i; j++) {
                sb.append(" ");
            }
            for (int j = 1; j <= 2*i-1; j++) {
                sb.append("*");
            }
            sb.append("\n");
        }
        for (int i = n-1; i >= 1; i--) {
            for (int j = 1; j <= n-i; j++) {
                sb.append(" ");
            }
            for (int j = 1; j <= 2*i-1; j++) {
                sb.append("*");
            }
            sb.append("\n");
        }
        System.out.print(sb);
    }
}

 

3. 참고 , 바로 출력

public class Main {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		final int N = sc.nextInt();
		
		for(int i = 1; i <= N ; i++) {
			for(int j = 0; j < N-i; j++)
				System.out.print(" ");
			for(int j = 0; j < i*2-1; j++)
				System.out.print("*");
			System.out.println();
		}
		
		for(int i = N-1; i >= 0 ; i--) {
			for(int j = 0; j < N-i; j++)
				System.out.print(" ");
			for(int j = 0; j < i*2-1; j++)
				System.out.print("*");
			System.out.println();
		}
	}

'자바 > 알고리즘 문제 풀이' 카테고리의 다른 글

백준/2750 수 정렬하기  (0) 2022.12.03
백준/1439 뒤집기  (0) 2022.10.29
백준/2439 별찍기2  (0) 2022.10.28
백준/10974 모든 순열  (0) 2022.10.28
백준 - 3040/백설 공주와 일곱 난쟁이  (0) 2022.10.28

댓글