CODING TEST/baekjoon

#2438, 2439, 2440 - 별찍기 1, 2, 3 모음

iamyuunzo 2025. 7. 18. 11:05

📌 문제 정보

- 문제 이름 : #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(" ") 사용해서 공백 먼저 찍기