문제 출처: https://www.acmicpc.net/problem/4779
문제
시도
초반에 재귀를 Top-down으로 구현하려고 했는데, 오랜만의 재귀라 기억이 나지 않아 Bottom-Up으로 구현했다.
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String[] kantour = new String[13];
kantour[0] = "-";
for(int i = 1; i <= 12; i++) {
int dash = (int) Math.pow(3, i-1);
kantour[i] = kantour[i - 1] + " ".repeat(dash) + kantour[i - 1];
}
String tmp;
while((tmp = br.readLine()) != null) {
if(tmp.equals("")) break;
int x = Integer.parseInt(tmp);
sb.append(kantour[x] + "\n");
}
System.out.print(sb);
}
}
헌데 String의 repeat 메서드가 Java 8 에는 없는 버전이라 에러가 발생했다.
Java 11로 돌렸을 때는 성공했지만 버전에 상관 없이 성공하도록 repeat 메서드를 제거했다.
풀이
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb;
String[] dash = new String[13];
dash[0] = "-";
for(int i = 1; i <= 12; i++) {
sb = new StringBuilder();
for(int j = 0; j < dash[i-1].length(); j++)
sb.append(' ');
dash[i] = dash[i-1] + sb + dash[i-1];
}
String str;
while((str = br.readLine()) != null) {
int n = Integer.parseInt(str);
System.out.print(dash[n] + "\n");
}
}
}
알게 된 점
1. 입력될 크기에 대한 언급이 없다면 while((tmp = br.readLine()) != null)을 통해 입력 받기.
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 9663 : N-Queen (1) | 2023.11.01 |
---|---|
[백준] 2580 : 스도쿠 (0) | 2023.10.31 |
[백준] 12789 : 도키도키 간식드리미 (0) | 2023.10.29 |
[백준] 2485 : 가로수 (1) | 2023.10.28 |
[백준] 1269 : 대칭 차집합 (0) | 2023.10.26 |