
난이도: ★★★☆☆ • solved on: 2026-01-19

자료구조
List<String> : 각 줄을 문자열 단위로 관리알고리즘/기법
핵심 키워드
- 문제 분해
N이 1일 때는
"*"하나로 종료되는 기저 조건을 둔다.N이 1보다 클 경우, 크기
n/3의 별 패턴을 먼저 만든다.만들어진 작은 패턴을 이용해
- 위:
***- 중간:
* *- 아래:
***
형태로 결합한다.
핵심 로직 흐름
getStars(n): if n == 1: return ["*"] small = getStars(n / 3) for s in small: add s + s + s for s in small: add s + blank + s for s in small: add s + s + s예외 처리
n == 1인 경우 바로 리스트를 반환하여 재귀를 종료한다.
import java.util.*;
import java.lang.*;
import java.io.*;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
List<String> result = getStars(n);
StringBuilder sb = new StringBuilder();
for(String s : result) {
sb.append(s).append("\n");
}
System.out.println(sb);
}
public static List<String> getStars(int n) {
List<String> result = new ArrayList<>();
if(n == 1) {
result.add("*");
return result;
}
List<String> smallStars = getStars(n / 3);
for(String s : smallStars) {
result.add(s + s + s);
}
String blank = "";
for(int i = 0; i < n / 3; i++){
blank += " ";
}
for(String s : smallStars) {
result.add(s + blank + s);
}
for(String s : smallStars) {
result.add(s + s + s);
}
return result;
}
}
시간 복잡도: O(N²)
공간 복잡도: O(N²)
String, List<String>, String[][] 중에서 무엇으로 할지 결정하지 못해 설계 단계에서 막혔다.int로 받고 List<String>으로 리턴하기)재귀 문제에서는 함수의 역할을 한 문장으로 정의하는 것이 매우 중요하다.
재귀 함수는 유닛 단위로 반복하는 것이기 때문
예: getStars(n)은 n 크기의 별 패턴을 문자열 리스트로 반환한다
출력 형태가 줄 단위로 고정되어 있다면 List<String>이 매우 자연스럽다.
중앙을 비우는 문제는 대부분 3등분 구조를 가지므로, 먼저 작은 패턴을 만든 뒤 조합하는 방식이 핵심이다.
비슷한 유형 (GPT 추천)
확장 문제 (GPT 추천)