알고리즘

[백준] 입출력 - 2552번, 별찍기 12

hatch 2023. 2. 23. 10:57
728x90
반응형

* 공부 목표

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

 

  • 2552번

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

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

 

** 이번에는 bufferedReader + bufferedWriter만 사용해서 풀었음.

 

1) 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 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(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();
	}
}

 

 

2) 중첩 for

 - for문이 너무 많아서 그런지 배열이랑 비슷하게 걸렸다...^^

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();
		
		for(int i=1; i<N+1; i++) {
			for(int j=0; j<N-i; j++) {
				bw.write(" ");
			}
			for(int z=N; z<N+i; z++) {
				bw.write("*");
			}
			bw.write("\n");
		}
		for(int i=1; i<N; i++) {
			for(int j=N; j<N+i; j++) {
				bw.write(" ");
			}
			for(int z=0; z<N-i; z++) {
				bw.write("*");
			}
			bw.write("\n");
		}
		bw.flush();
		bw.close();
	}
}

 


 

 

제출번호

 - 56326202 : 배열

 - 56326638 : for문

큰 차이 없다... for문 사용하려면 더 효율적인 코드를 작성했어야 했던 것 같다...