
Star wars가 재귀와 함께 화려하게 부활했다. 아이디어는 얻었지만, 손쉬운 재귀만 풀다가 어려운 문제를 만나 힘들기도 했고, 그래서 그냥 남의 코드를 보고 이해하며 풀었다.
평소에 보던 블로그 외에도 다른 사람들의 풀이를 많이 대조했는데, 대부분 처음부터 이중구문을 돌려 빈칸을 만든뒤 풀었기에 연산이 쓸데없이 많아진다 판단하여 원래 보던 이방인님 블로그를 베꼈다.
[백준] 2447번 : 별 찍기 - 10 - JAVA [자바]
www.acmicpc.net/problem/2447 2447번: 별 찍기 - 10 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백..
st-lab.tistory.com
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static char[][] xy;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
xy = new char[n][n];
star(0,0,n,false);
StringBuilder sb = new StringBuilder();
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
sb.append(xy[i][j]);
}
sb.append('\n');
}
System.out.println(sb);
}
static void star(int x, int y, int n, boolean blank) {
//공백인 경우
if (blank) {
for(int i=x; i<x+n; i++) {
for (int j=y; j<y+n; j++) {
xy[i][j]=' ';
}
}
return;
}
//n=1로 더이상 쪼갤 수 없고, 공백이 아니면 별을 찍는다.
if (n==1) {
xy[x][y] = '*';
return;
}
//n의 크기에 따라 n/3을 기준으로 재귀호출
int size=n/3; // 기준사이즈
int count = 0; // 가운데 공백구분을 위한 count
for (int i=x; i<x+n; i+=size) {
for (int j=y; j<y+n; j+=size) {
count++;
if (count == 5) {
star(i,j,size,true);
} else {
star(i,j,size,false);
}
}
}
}
}'백준 문제풀이' 카테고리의 다른 글
| 11729. 하노이 탑 이동 순서 (자바, Java) (0) | 2022.10.02 |
|---|---|
| 2448. 별 찍기 - 11 (자바, Java) (0) | 2022.10.01 |
| 25501. 재귀의 귀재 (자바, Java) (0) | 2022.10.01 |
| 17478. 재귀함수가 뭔가요? (자바, Java) (0) | 2022.10.01 |
| 10870번 : 피보나치 수 5 (자바, Java) (0) | 2022.10.01 |