본문 바로가기
PS/BOJ

[자바] 백준 23808 - 골뱅이 찍기 - ㅂ (boj java)

by Nahwasa 2022. 6. 5.

문제 : 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();
    }
}

댓글