문제 : boj23808
규칙을 찾아 그걸 그대로 구현해주는 문제이다. 일단 가로로만 보자. 그럼 두 가지 형태가 보이는 것을 알 수 있다.
'@ @' 형태와 '@@@@@' 형태이다. 이 때, n=1일 대와 n=3일때를 비교해보면 각 행은 총 길이가 n*5임을 알 수 있고, '@ @'형태의 경우엔 n개의 @ + n*3개의 공백 + n개의 @으로 이루어져 있음을 알 수 있다. 그럼 이걸 우선 함수로 빼두자. 이하 코드에서 printSplitShells가 그 구현이다. 그리고 '@@@@@'형태는 더 간단하게 n*5개의 @으로 이루어져 있다. 이하 코드에서 printFullShells가 이 형태를 나타낸다.
다음으로는 세로로 보자. n*2개의 '@ @'형태 + n개의 '@@@@@'형태 + n개의 '@ @'형태 + n개의 '@@@@@' 형태가 순서대로 나타난다. 이미 가로의 형태는 함수로 빼두었으므로, 세로도 순서대로 개수만 맞게 위에서 구현해둔 함수를 사용해주기만 하면 된다.
코드 : github
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
StringBuilder sb = new StringBuilder();
private void printSplitShells(int n) {
for (int j = 0; j < n; j++) sb.append('@');
for (int j = 0; j < n*3; j++) sb.append(' ');
for (int j = 0; j < n; j++) sb.append('@');
sb.append('\n');
}
private void printFullShells(int n) {
for (int j = 0; j < n*5; j++) sb.append('@');
sb.append('\n');
}
private void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
for (int i = 0; i < n*2; i++) printSplitShells(n);
for (int i = 0; i < n; i++) printFullShells(n);
for (int i = 0; i < n; i++) printSplitShells(n);
for (int i = 0; i < n; i++) printFullShells(n);
System.out.print(sb);
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
'PS > BOJ' 카테고리의 다른 글
[자바] 백준 10986 - 나머지 합 (boj java) (0) | 2022.06.07 |
---|---|
[자바] 백준 22938 - 백발백준하는 명사수 (boj java) (0) | 2022.06.06 |
[자바] 백준 24445 - 알고리즘 수업 - 너비 우선 탐색 2 (boj java) (0) | 2022.06.04 |
[자바] 백준 24444 - 알고리즘 수업 - 너비 우선 탐색 1 (boj java) (0) | 2022.06.03 |
[자바] 백준 4108 - 지뢰찾기 (boj java) (0) | 2022.06.02 |
댓글