알고리즘
[백준] 입출력 - 2552번, 별찍기 12
hatch
2023. 2. 23. 10:57
728x90
반응형
* 공부 목표
입출력 - 2557, 1000, 2558, 10950, 10951, 10952, 10953, 11021, 11022, 11718, 11719, 11720, 11721, 2741, 2742, 2739, 1924, 8393, 10818, 2438, 2439, 2440, 2441, 2442, 2445, 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문 사용하려면 더 효율적인 코드를 작성했어야 했던 것 같다...