알고리즘

[백준] 입출력 - 2446번, 별찍기 9

hatch 2023. 3. 20. 23:47
728x90
반응형

* 공부 목표

입출력 - 2557, 1000, 2558, 1095010951, 10952, 1095311021, 11022, 11718, 1171911720, 117212741, 2742, 27391924, 8393, 108182438, 2439, 24402441, 244224452522, 2446, 10991, 10992

 

  • 2446번

 

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

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

 

1. Scanner

 - Arrays.copyOf()와 Arrays.sort([배열], Comparator.reverseOrder()) 잊음.

import java.util.*;

public class Main {
    public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
        sc.close();
		String[] star = new String[num];
		String[] Rstar = new String[num];
		for(int i=1; i<num+1; i++) {
			star[i-1] = " ".repeat(num-i)+"*".repeat(2*i-1);
		}
		Rstar = Arrays.copyOf(star, num);
		Arrays.sort(Rstar, Comparator.reverseOrder());
		
		for(int i=0; i<num; i++) {
			System.out.println(Rstar[i]);
		}
		for(int i=1; i<num; i++) {
			System.out.println(star[i]);
		}
	}
}

 

2. Br+Bw //메모리도 적게, 시간은 절반 가량 적게 소요.

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

public class Main {
    public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int num = Integer.parseInt(br.readLine());
		br.close();
		String[] star = new String[num];
		String[] Rstar = new String[num];
		for(int i=1; i<num+1; i++) {
			star[i-1] = " ".repeat(num-i)+"*".repeat(2*i-1);
		}
		Rstar = Arrays.copyOf(star, num);
		Arrays.sort(Rstar, Comparator.reverseOrder());
		
		for(int i=0; i<num; i++) {
			bw.write(Rstar[i] + "\n");
		}
		for(int i=1; i<num; i++) {
			bw.write(star[i] + "\n");
		}
		bw.flush();
		bw.close();
	}
}