#2438, 2439, 2440 - 별찍기 1, 2, 3 모음
📌 문제 정보
- 문제 이름 : #2438, 2439, 2440번 - 별찍기 1, 2, 3
- 문제 링크: https://www.acmicpc.net/problem/2438 (1) / https://www.acmicpc.net/problem/2439 (2) / https://www.acmicpc.net/problem/2440 (3)
📌 문제 요약
- 핵심 조건:
(1) 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제
(2) 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 (오른쪽 정렬한 별)
(3) 첫째 줄에는 별 N개, 둘째 줄에는 별 N-1개, ..., N번째 줄에는 별 1개를 찍는 문제
- 출력 : 입력이 5일 때..
// 1번 // 2번 // 3번
* * *****
** ** ****
*** *** ***
**** **** **
***** ***** *
📌 최종 풀이 및 코드
1) 1번 별찍기 - 1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N;
N = sc.nextInt();
for (int i=1; i<=N; i++) {
for (int j=1; j<=i; j++){
System.out.print("*");
}
System.out.println();
}
}
}
- 왼쪽 정렬, 아래로 늘어나는 별
- 답을 맞추지 못했음. for문 하나로 해결하려고 했으나 실패함. 계속 * 하나만 출력됨.
( for (N=1; N<100; N++) { System.out.println("*"); )
- 한 줄 다 찍고 나면 줄 바꿈 -> 바깥쪽 for문에 println을 넣으면 됨.
2) 2번 별찍기 - 2
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N - i; j++) {
System.out.print(" "); // 공백 먼저 찍음
}
for (int j = 1; j <= i; j++) {
System.out.print("*"); // 별 찍음
}
System.out.println();
}
}
}
- 오른쪽 정렬, 아래로 늘어나는 별
- 공백을 먼저 출력하는걸 어떻게 해야할지 감이 안 잡혔음.
3) 3번 별찍기 - 3
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
for (int i = N; i >= 1; i--) { // 1번과 다른건 감소한다는 것
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
<-- 내가 처음에 어떻게 풀었는지 -->
- 왼쪽 정렬, 아래로 줄어드는 별
- 밖에 있는 for문은 몇 줄을 찍을지 (줄 수) => 감소함
- 별을 i개 찍는데 줄바꿈 없이 별만 찍다가 줄 끝나면 줄 바꿈.
- 안에 있는 for문은 그 줄에 *을 몇 개 찍을지
📌 3개의 코드의 차이
| 버전 | 정렬 | 별 개수 흐름 | 공백 있음? | 출력 모양 |
| 1번 | 왼쪽 | 1 → N 증가 | ❌ 없음 | 아래로 늘어남 |
| 2번 | 오른쪽 | 1 → N 증가 | ✅ 있음 | 오른쪽 정렬 |
| 3번 | 왼쪽 | N → 1 감소 | ❌ 없음 | 아래로 줄어듦 |
- 별 늘리기: for (int j = 1; j <= i; j++)
- 별 줄이기: for (int i = N; i >= 1; i--)
- 오른쪽 정렬: System.out.print(" ") 사용해서 공백 먼저 찍기