문제

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제

하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

 

입력

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

 

출력

첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.

 


2438 별찍기 문제에서 조금 더 변형시켜야 하는 문제!

 

acmicpc(baekjoon) - 2438 : 별 찍기 - 1

문제 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 입력 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다. 출력 첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다. 풀이 이중 for

se-cure.tistory.com

2438 별찍기 문제에서는 

*

**

***

****

***** 

형태로 출력이 돼야 했으니까, 아래처럼 문제를 풀었다.

 

for( i는 1부터 N까지, 1씩 증가) {          -------- ( 1 )

   for ( j는 1부터 i까지, 1씩 증가) {        -------- ( 2 )

     * 출력

   }

}

 

 

하지만 이제 앞부분 공백이 들어가고, 우측 정렬로 출력이 되어야 하니까,

(1) 번 for문 안에 공백 출력하는 for 구문과, *을 출력하는 for 구문 두 개를 작성해줬다.

 

for ( i는 1부터 N까지, 1씩 증가 ) {          ------ (1)

      for ( j는 0부터 (N-i)-1까지, 1씩 증가 ) {   ------ (2) // for ( j=0; j<N-i; j++)

             공백 " " 출력

      }

 

      for ( k는 j부터 N-1까지, 1씩 증가 ) {    ------ (3)  // for ( k=j; k<N; k++)

             * 출력

      }

      개행

}

 

 

(1)은 똑같이 1~N으로 설정하고, (총 5줄 출력)

 

(2)번 for문은 공백을 출력한다.

 - 0부터 N-i까지, 즉 첫번째 라인 (i=1) 일 때는 공백이 4개, 두 번째 라인 (i=2)일 때는 공백이 3개여야 하므로 n-i 로 설정한다. 

 

(3)번 for문에서는 *을 출력한다.

 - j부터 N-1까지인데, 이유는 (2)번 for문에서 공백이 출력이 되었으므로, 그 개수 이후부터, N개만큼 출력되어야 한다.

   예를 들어, 두 번째 라인 (i=2)일 때, j는 0부터 (N-i)-1 (== 2) 까지 총 3번 출력되었을 것이다. 

   이 때 남은 2개는 *이 출력되어야 하므로, 조건을 k는 j부터, k < N 으로 설정해주면 3, 4 이렇게 두 번 반복한다.

 

 

 


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Scanner;
 
public class Main{
    public static void main(String[] args) {
        
        Scanner scan = new Scanner(System.in);
        
        int N = scan.nextInt();
        int j;
        for (int i=1; i<=N; i++) {
            for (j=0; j<N-i; j++) {
                System.out.print(" ");
            }
            for (int k=j; k<N; k++) {
                System.out.print("*");
            }
            System.out.print("\n");
        }
    }
}
cs

+ Recent posts