반응형
문제
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다.
크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴이다
풀이
문제에서 재귀적으로 별을 그리는 프로그램을 그리라고 되어 있었기 때문에 재귀적으로 만들었다.
📌 별 그리기
public static String[] makeStar(int N){
String[] star = new String[N];
if(N == 1) {
star[0] = "*";
return star;
}
else{
String[] temp = makeStar(N/3);
for(int i=0; i<N; i++){
if(i < N/3 || i >= N/3 *2)
star[i] = temp[i%(N/3)].repeat(3);
else
star[i] = temp[i%(N/3)] + " ".repeat(N/3) + temp[i%(N/3)];
}
}
return star;
}
각각의 별은 여러 줄에 걸쳐서 만들어졌기 때문에 이 별들로 구성된 다음 3의 거듭제곱의 별을 그리기 위해서는 한줄한줄 잘라서 받아야 했다.
각각의 별은 N/3의 별로 둘러싸인 모습을 했다.
- i가 N/3 보다 작은 인덱스에서는 N/3별을 3번 그린다.
- i가 N/3 보다 크고 N/3 *2 보다 작은 인덱스에서는 N/3별 + 공백 + N/3별을 그려야 한다.
- i가 N/3 *2 보다 큰 인덱스에서는 N/3별을 3번 그린다.
위와 같은 규칙으로 별들을 그려준다.
📌 출력
String[] star = makeStar(N);
StringBuilder sb = new StringBuilder();
for(int i=0; i<N; i++){
sb.append(star[i]).append("\n");
}
System.out.println(sb);
출력이 많기 때문에 StringBuilder를 사용하여 출력하였다.
📌 전체 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
String[] star = makeStar(N);
StringBuilder sb = new StringBuilder();
for(int i=0; i<N; i++){
sb.append(star[i]).append("\n");
}
System.out.println(sb);
}
public static String[] makeStar(int N){
String[] star = new String[N];
if(N == 1) {
star[0] = "*";
return star;
}
else{
String[] temp = makeStar(N/3);
for(int i=0; i<N; i++){
if(i < N/3 || i >= N/3 *2)
star[i] = temp[i%(N/3)].repeat(3);
else
star[i] = temp[i%(N/3)] + " ".repeat(N/3) + temp[i%(N/3)];
}
}
return star;
}
}
결과
반응형
'백준' 카테고리의 다른 글
[JAVA] 백준 2667 (1) | 2024.03.24 |
---|---|
[JAVA] 백준 1722 조합 (2) | 2024.03.17 |
[JAVA] 백준 16139 구간합 (0) | 2024.03.12 |
[JAVA] 백준 13251 (0) | 2024.03.11 |
[JAVA] 백준 1010 조합+DP (0) | 2024.03.11 |