728x90
반응형
SMALL
백준 저지에서 별을 자바를 통해 풀어 보았다.
https://www.acmicpc.net/problem/16505
16505번 별
문제
출력 예제를 보고 별 찍는 규칙을 유추하여 별을 찍어 보자.
설명
n번 째로 찍는 별은 n-1번 째로 찍은 별을 세 번 반복한 것과 같다. 이 부분은 그렇게 어렵지 않으나 다른 곳에서 문제가 생겼다.
모든 별을 반복문을 통해 돌아가면 바로 바로 찍어주었는데 이 때문에 100%에서 시간 초과가 발생하여 멘붕 상태에 빠졌다.
이는 출력은 반복시마다 해주어서 그런데 이보다는 출력할 대상들을 한 번에 출력해주는 것이 더 빠르다. StringBuilder를 통해 출력물들을 모아 한 번에 출력해주었더니 정답을 맞출 수 있었다.
추가로 문제 조건에 각 문장 끝에 있는 공백은 출력하지 않는다는 조건을 정확히 구현해야 정답을 맞출 수 있다.
코드
//16505번 별.java
package week3;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class 별_16505 {
private static char star[][];
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int num=Integer.parseInt(bf.readLine());
int size = (int) Math.pow(2, num);
star = print_star(num+1,size*2);
StringBuilder sb = new StringBuilder();
for(int i=0;i<size;i++) {
for(int j=0;j<(size-i);j++) {
sb.append(star[i][j]);
}sb.append("\n");
}
System.out.println(sb.toString().substring(0, sb.length()-1));
}
public static char[][] print_star(int num, int size) {
char[][]star = new char[size][size];
for(int i=0;i<size;i++) {
Arrays.fill(star[i], ' ');
}
if(num==0) {
star[0][0]='*';
return star;
}
char[][] pre_star = print_star(num-1,size/2);
for(int i=0;i<size;i++) {
for(int j=0;j<size;j++) {
if(j<size-i) {
star[i][j]=pre_star[i%(size/2)][j%(size/2)];
}
}
}
return star;
}
}
728x90
반응형
SMALL
'Problem Solving > 백준BOJ' 카테고리의 다른 글
[백준BOJ] 5568번 카드 놓기.java (0) | 2021.08.02 |
---|---|
[백준BOJ] 10994번 별 찍기-19.java (0) | 2021.08.02 |
[백준BOJ] 1991번 트리 순회.py (0) | 2021.07.29 |
[백준BOJ] 1753번 최단경로.py (0) | 2021.07.28 |
[백준BOJ] 15666번 N과 M(12).py (0) | 2021.07.27 |