• [백준 알고리즘] (I/O) 2442번 Java 풀이

    2020. 3. 7.

    by. SDev

    728x90

    입출력 - 2557, 1000, 2558, 10950, 10951, 10952, 10953, 11021, 11022, 11718, 11719, 11720, 11721, 2741, 2742, 2739, 1924, 8393, 10818, 2438, 2439, 2440, 2441, 2442, 2445, 2522, 2446, 10991, 10992

    출처: https://plzrun.tistory.com/entry/알고리즘-문제풀이PS-시작하기 [plzrun's algorithm]

     

    문제

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

    별은 가운데를 기준으로 대칭이어야 한다.

    입력

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

    출력

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

    출처

     

     

     

    change Nxxxx -> Main && remove package lines!!!

    이클립스에서 작성하면서 문제 이름으로 클래스를 생성하여 풀었기 때문에

    클래스 이름을 Main으로 바꾸고, package 부분도 지우고 제출해야 정상적으로 돌아갑니다.

     

    <첫 번째 풀이> - 오답 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    package io;
     
    import java.util.Scanner;
     
    public class N2442 {
     
        public static void main(String[] args) {
     
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            
            for(int p=0; p<n; p++) {
                for(int q=0; q<n-p-1; q++){
                    System.out.print(" ");
                }
                for(int q=0; q<2*p+1; q++){
                    System.out.print("*");
                }
                for(int q=0; q<n-p-1; q++){
                    System.out.print(" ");
                }
                System.out.println("");
                
            }
        }
     
    }
     
     

     

    위 코드로 작성하였으나 "출력 형식이 잘못되었습니다" 라는 에러메시지를 받았습니다.

     

    알고 보니, 별이 찍히는 뒤에는 공백을 만들어주지 않아야 하기 때문이었습니다.

    따라서 뒷 공백을 만들어주는 

    for(int q=0; q<n-p-1; q++){

                    System.out.print(" ");

                }

    코드를 삭제하고 제출했더니, 다행히 성공 표시를 받았습니다.

    <두 번째 풀이>

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    package io;
     
    import java.util.Scanner;
     
    public class N2442 {
     
        public static void main(String[] args) {
     
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            
            for(int p=0; p<n; p++) {
                for(int q=0; q<n-p-1; q++){
                    System.out.print(" ");
                }
                for(int q=0; q<2*p+1; q++){
                    System.out.print("*");
                }
     
                System.out.println("");
                
            }
        }
     
    }
     
     
     

     

    ps) 개인적으로는 별 찍기 문제가 개념이 비슷한데도 빨리 풀이가 되지 않네요.(풀 때마다 10분 정도 소요...)

    변수간의 관계에 익숙해지기에 별 찍기 문제가 많은 도움이 되는 것 같아 익숙해질때까지 반복 숙달이 필요할 것 같아요.

     

    댓글