티스토리 뷰

 

문제는 위와 같으며 반복되는 구성의 가장 작은 단위를 배열로 만들고 ["  *  ", " * * ", "*****"] 반복횟수가 2이상 (즉, 6부터) 인 경우 패턴을 찾아 해결하였습니다. 패턴을 보면 출력해야하는 길이의 절반(기존 반복 배열에 들어있는 문자의 수)까지는 앞뒤로 절반 길이 만큼의 빈 공간이 있고, 절반 이후부터는 문자의 중간에 빈 문자열이 하나 포함되어 있다는 것을 알 수 있습니다.

 

파이썬 코드는 다음과 같습니다.

from sys import stdin


def make_star(star):
    matrix = []
    for i in range(2 * len(star)): # 이미 들어있는 문자열의 2배만큼 반복
        if i < len(star):
            matrix.append((" " * len(star)) + star[i % len(star)] + (" " * len(star))) # 절반의 앞부분은 앞뒤로 절반 길이만큼 공백
        else:
            matrix.append(star[i % len(star)] + " " + star[i % len(star)]) # 절반의 뒷부분은 중간에 공백 하나
    return matrix


n = int(stdin.readline())
stars = ["  *  ", " * * ", "*****"]
k = 0
n = int(n/3)

while n != 1:
    n = int(n/2)
    k += 1

# 위에서 구한 k 수만큼 반복
for _ in range(k):
    stars = make_star(stars)

print("\n".join(s for s in stars))

 

자바 코드는 다음과 같습니다.

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        String[] stars = {"  *  ", " * * ", "*****"};

        int k = 0;
        n = n / 3;
        while (n != 1) {
            n = n / 2;
            k += 1;
        }

        for (int i = 0; i < k; i++) {
            stars = makeStar(stars);
        }

        for (String s : stars) {
            System.out.println(s);
        }
    }

    private static String[] makeStar(String[] star) {
        String[] matrix = new String[star.length * 2];
        for (int i = 0; i < matrix.length; i++) {
            if (i < star.length) {
                StringBuilder sb = new StringBuilder();
                for (int j = 0; j < star.length; j++) {
                    sb.append(" ");
                }
                matrix[i] = sb.toString() + star[i % star.length] + sb.toString();
            } else {
                matrix[i] = star[i % star.length] + " " +star[i % star.length];
            }
        }
        return matrix;
    }
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함