# 문제
# 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BOJ2444_v1 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine()); // 5
int num = N;
int count = 0;
int starC = 1;
for (int i = 0; i < N * 2 - 1; i++) { // 9번 반복
// if문 count 5 기준으로 계산 공백과 별 출력 계산
if (count < N) {
// 공백 계산
for (int j = num - 1; j > 0; j--) {
System.out.print(" ");
}
// 별 계산
for (int k = 0; k < starC; k++) {
System.out.print("*");
}
System.out.println(); // 줄바꿈
count++; // count 1씩 증가
starC += 2; // 별 개수 2씩 증가
num--; // 공백 1씩 감소
} else { // count 5 이상이면 실행
starC -= 2; // 별 개수 2씩 감소
num++; // 공백 1씩 증가
// 공백 계산
for (int j = 0; j < num; j++) {
System.out.print(" ");
}
// 별 계산
for (int k = starC - 2; k > 0; k--) {
System.out.print("*");
}
System.out.println(); // 줄바꿈
}
}
}
}
# 입/출력 결과

# 과정
- 입력은 BufferedReader 클래스 사용
- int N에 입력받은 값 숫자타입으로 형변환하여 저장
- int num에 N을 저장
- int count = 0; 선언과 초기화
- int starC = 1; 선언과 초기화. 별 출력할 때 사용
- for문 사용하여 9번 반복하는 계산을 만듦
- if-else문을 사용해서 count가 N보다 작으면 상단 별 계산. N보다 크면 하단 별 계산하도록 작성
- 상단 계산
- : for문 사용해서 공백이 4, 3, 2, 1, 0 순으로 출력되도록 계산
- : for문 사용해서 공백이 끝나면 바로 실행되는데, 별이 1, 3, 5, 7, 9 출력되도록 계산
- : 공백과 별 계산이 끝나면 줄바꿈.
- : count 1씩 증가, starC 별 개수 2씩 증가, num 공백 1씩 감소 시켜주기
- 하단 계산
- : 처음에 starC 2씩 감소되도록 작성
- : 그 다음 num 공백이 1씩 증가되도록 작성
- : for문 사용해서 공백이 1, 2, 3, 4 순으로 출력되도록 계산
- : for문 사용해서 별이 7, 5, 3, 1 순으로 출력되도록 계산
- : 공백과 별 계산이 끝날 때마다 줄바꿈.
# 메모
- 공백 먼저 4, 3, 2, 1, 0, 1, 2, 3, 4 순으로 출력되도록 만들고, 그 다음 별이 1, 3, 5, 7, 9, 7, 5, 3, 1 출력되도록 코드를 작성했다.
- 내가 만든건 너무 지저분한 거 같아서 chat-gpt한테 리팩토링 한다면 어떻게 하면 좋을지 알려달라고 하니 main() 메서드 아래에 출력하는 메서드 하나를 만들어서 매개변수로 char와 int 값을 받도록 지정하고, main 메서드에서 상단과 하단을 나눈 다음 상단 계산 for문, 하단 계산 for문으로 나누어서 각각 출력하는 방식으로 했다. 좀 더 깔끔하고 보기 좋아보이는 코드였다.
gpt가 내 코드 리팩토링 해준 거 ▼
package baekjoon.class6;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BOJ2444_v2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
// 상단
for (int i = 0; i < N; i++) {
int spaceCount = N - 1 - i;
int starCount = 2 * i + 1;
printChars(' ', spaceCount);
printChars('*', starCount);
System.out.println();
}
// 하단
for (int i = N - 2; i >= 0; i--) {
int spaceCount = N - 1 - i;
int starCount = 2 * i + 1;
printChars(' ', spaceCount);
printChars('*', starCount);
System.out.println();
}
}
// 반복 문자 출력 함수
public static void printChars(char ch, int count) {
for (int i = 0; i < count; i++) {
System.out.print(ch);
}
}
}

'코딩 테스트' 카테고리의 다른 글
| [코딩테스트] 백준 1157번: 단어 공부 (0) | 2025.06.18 |
|---|---|
| [코딩테스트] 백준 10988번: 팰린드롬인지 확인하기 (0) | 2025.06.17 |
| [코딩테스트] 백준 3003번: 킹, 퀸, 룩, 비숍, 나이트, 폰 (0) | 2025.06.16 |
| [코딩테스트] 백준 25083번: 새싹 (0) | 2025.06.16 |
| [코딩테스트] 백준 11718번: 그대로 출력하기 (0) | 2025.06.15 |