재귀로 푸는 문제이다.
입력이 끝나는 위치가 없어서 BufferedReader를 통해 입력을 받아야 한다. 처음 알았다!
String s;
while ((s = br.readLine()) != null) {
길이가 3^n인 char 배열을 만들고 '-'로 채워 넣는다.
다음으로 kanto 메서드를 만들었다. kanto는 start(시작 지점)과 초기 length를 지정해준다.
가장 처음에는 시작 지점이 index = 0, length = 3 ^ n이다.
이후 length / 3만큼 가운데를 지우고 재귀를 통해 다음으로 넘어간다.
import java.io.*;
public class Main {
static char [] ch;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb;
String s;
while ((s = br.readLine()) != null) {
int n = Integer.parseInt(s);
ch = new char[(int) Math.pow(3, n)];
for (int i = 0; i < ch.length; i++) {
ch[i] = '-';
}
kanto(0, ch.length);
sb = new StringBuilder();
for (int i = 0; i < ch.length; i++) {
sb.append(ch[i]);
}
System.out.println(sb);
}
}
private static void kanto(int start, int len) {
if (len < 3) return;
int l = len / 3;
for (int i = start + l; i < start + l * 2; i++) {
ch[i] = ' ';
}
kanto(start, l);
kanto(start + l * 2, l);
}
}
'BOJ' 카테고리의 다른 글
[BOJ] [JAVA] 11003번 최소값 찾기 (1) | 2024.02.10 |
---|---|
[BOJ] [JAVA] 1167번 트리의 지름 (1) | 2024.02.07 |
[BOJ] [JAVA] 14442번 벽 부수고 이동하기 2 (1) | 2024.01.27 |
[BOJ] [JAVA] 1012번 유기농 배추 (0) | 2024.01.20 |
[BOJ] [JAVA] 24060번 알고리즘 수업 - 병합 정렬 1 (0) | 2024.01.14 |
[BOJ] [JAVA] 20920번 영단어 암기는 괴로워 (0) | 2024.01.14 |
[BOJ] [JAVA] 1016번 제곱 ㄴㄴ 수 (2) | 2024.01.11 |
[BOJ] [JAVA] 11866번 요세푸스 문제0 (0) | 2024.01.10 |