https://www.acmicpc.net/problem/2444

import java.io.*;
public class Main{
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 = 1; i <= n; i++){
for (int j = n; j > i ; j--){
System.out.printf("%s", " ");
}
for(int m = 0; m < (2 * i - 1); m = m + 1){
System.out.printf("%s", "*");
}
System.out.println();
}
for(int i = 1; i < n; i++){
for(int j = 0; j < i ; j++){
System.out.printf("%s", " ");
}
for(int m = (2 * n - 2); m > 2 * i - 1 ; m--){
System.out.printf("%s", "*");
}
System.out.println();
}
}
}
진짜 싫어하는 별 찍기 문제
왜 싫냐면 내가 못해서.
반복문 2개 이상 나오면 머리가 터져버릴 것 같다.
정답 맞히는 것만 신경 쓰고 효율이나 가독성은 하나도 신경 안 쓰는 바람에 코드가 좀 더러움
printf 대신 그냥 print 써도 되고, StringBuilder에 append 써서 출력문은 반복문 끝나고 한 번에 출력해도 될 듯
내가 당장 고치기엔 귀찮아서 구상만 해놓고 지피티한테 맡겨봤음
import java.io.*;
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());
StringBuilder sb = new StringBuilder();
// 위쪽 (1 ~ n)
for (int i = 1; i <= n; i++) {
int spaces = n - i;
int stars = 2 * i - 1;
for (int s = 0; s < spaces; s++) sb.append(' ');
for (int s = 0; s < stars; s++) sb.append('*');
sb.append('\n');
}
// 아래쪽 (1 ~ n-1)
for (int i = 1; i <= n - 1; i++) {
int spaces = i;
int stars = 2 * (n - i) - 1; // = 2n - 2i - 1
for (int s = 0; s < spaces; s++) sb.append(' ');
for (int s = 0; s < stars; s++) sb.append('*');
sb.append('\n');
}
System.out.print(sb);
}
}

append 쓴다는 게 사실 이 정도로 쓴다는 건 아니었는데..
그리고 반복문 안에 변수를 밖으로 빼서 훨씬 간결하게 표현했다.
메모리랑 시간도 눈에 띄게 줄어들었다.
'Java' 카테고리의 다른 글
| [백준] 코딩테스트 문제 1157: 단어 공부 (0) | 2026.02.25 |
|---|---|
| [백준] 코딩 테스트 문제 10988: 팰린드롬인지 확인하기 (0) | 2026.02.24 |
| [백준] 코딩테스트 문제 3003: 킹, 퀸, 룩, 비숍, 나이트, 폰 (0) | 2026.02.24 |
| [백준] 코딩 테스트 문제 25083: 새싹 (0) | 2026.02.24 |
| [백준] 코딩테스트 문제 2675: 문자열 반복 (0) | 2026.02.23 |