알고리즘

[백준] 입출력 - 2445번, 별찍기5

hatch 2023. 2. 17. 13:33
728x90
반응형

* 공부 목표

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

  • 2445번

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

 

 

** 풀이

: 중첩 for문으로 시도했다가 배열 사용하면 좋겠다는 생각이 듦.

 

1. 배열로 오름차순 정렬되어 있는 것 만든 후

 

2. 새로운 배열에 깊은 복사한 다음, 뒤집어 출력(Arrays.sort(, Comparator.reverseOrder());)

 

 - (문제 발생) .clone(); 으로 복사하니, 맨 마지막 공백 없는 줄(형광펜)이 반복되어서 출력.

 - (해결) .copyOfRange(); 를 통해 복사 범위 지정하였음.

  // 이 경우에는 시작 점은 고정이니, copyOf(); 를 써도 무관할 것 같다.

 

1) Scanner 활용

import java.util.*;

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

 

2) BufferedReader + BufferedWriter // 메모리는 조금 차이 났고, 시간은 거의 반토막 수준.

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 N = Integer.parseInt(br.readLine());
		br.close();
		String[] star = new String[N];
		String[] Rstar = new String[N-1];
		
		for(int j=1; j<N+1; j++) {
			star[j-1] = "*".repeat(j) + " ".repeat(N-j) +  " ".repeat(N-j) +  "*".repeat(j);
			bw.write(star[j-1] + "\n");
		}
		Rstar = Arrays.copyOfRange(star, 0, N-1);
		Arrays.sort(Rstar, Comparator.reverseOrder());
		for(int z=0; z<N-1; z++) {
			bw.write(Rstar[z] + "\n");
		}
		bw.flush();
		bw.close();
	}
}

 

 

[참고] https://coding-factory.tistory.com/548