Computer Science/자료구조와 알고리즘

[JAVA] 백준 2446번 : 별찍기 -9

BS Kwak 2020. 7. 25. 12:53

1. 문제

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

 

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=0;i<n;i++){
            for(int j=0;j<i;j++){
                System.out.print(" ");
            }
            for(int j=0;j<2*(n-i)-1;j++){
                System.out.print("*");
            }
            System.out.println();
        }
        for(int i=1;i<n;i++){
            for(int j=0;j<n-1-i;j++){
                System.out.print(" ");
            }
            for(int j=0;j<2*i+1;j++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

 

3. 풀이

표를 그려 나타내면 다음과 같다. (n=3일때)

i 빈칸개수 * 개수
첫번째 반복문
0 0 5 = (3-0) * 2
1 1 3 = ( 3 - 1 ) * 2
2 2 1 = ( 3 - 2 ) * 2
두번째 반복문
1 1 = ( 3 - 1 ) - 1 3 = 2 * 1 + 1
2 0 = ( 3 - 1 ) - 2 5 = 2 * 2 + 1

따라서 첫번째 반복문에서의 빈칸 개수는 i 개 이고, * 개수는 ( n - i ) * 2 임을 알 수 있다. 

두번째 반복문에서의 빈칸 개수는 ( n - 1 ) - i 개이고, * 개수는 2 * i + 1 임을 알 수 있다. 

 

출력 형식이 잘못 되었습니다. 라는 결과가 계속 나왔었는데, 

eclipse에서 실행을 해도 출력 결과는 맞게 나왔다.

검색을 해보니 

원인은 " 뒤에 공백은 출력하지않아도된다 " 라고 했는데, 나는 처음부터 코드를 짤때 뒤에 공백을 출력하지 않았기 때문에 내 원인은 다르다. 

코드를 자세히 살펴보니까 n으로 입력해야 할 부분을 5로 입력했다. 그래서 코드를 실행시켰을 때, 예제처럼 5를 입력했을때, 같은 결과가 나온 것이다. 예제 입력이 아닌 다른 숫자를 넣어보았다면, 나의 코드에 문제가 있음을 한번에 알 수 있었을 텐데.. -> "예제에 나온 숫자만 입력해보지 말고 새로운 숫자도 입력해 볼것 " 

 

 

4. 링크

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

 

2446번: 별 찍기 - 9

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

www.acmicpc.net