Algorithm/JUNGOL

[정올] 1719 : 별삼각형2 (*)

Gyuri 2022. 1. 21. 00:19

문제

삼각형의 높이 n과 종류 m을 입력 받은 후 다음과 같은 삼각형 형태로 출력하는 프로그램을 작성하시오. 

다음은 n이 5인 경우의 예시이다.

입력형식

삼각형의 크기 n(n의 범위는 100 이하의 홀수)과 종류 m(m은 1부터 4사이의 정수)을 입력받는다.

출력형식

위에서 언급된 4가지 종류를 입력에서 들어온 높이 n과 종류 m에 맞춰서 출력한다.

입력된 데이터가 주어진 범위를 벗어나면 "INPUT ERROR!"을 출력한다. 

'*'과 '*' 사이에는 공백이 없다.

입력 예

5 1

출력 예

*
**
***
**
*

입력 예

7 4

출력 예

****
 ***
  **
   *
   **
   ***
   ****

코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt(); // 삼각형의 높이
        int m = sc.nextInt(); // 삼각형의 종류

        if(n>100 || n%2==0 || m <1 || m > 4) {
            System.out.println("INPUT ERROR!");
            return;
        }

        if (m == 1) { 
            for (int i = 0; i < n / 2 + 1; i++) {
                for (int k = 0; k < i + 1; k++) {
                    System.out.print("*");
                }
                System.out.println();
            }

            for (int i = 0; i < n - (n / 2 + 1); i++) { 
                for (int k = 0; k < n / 2 - i; k++) { 
                    System.out.print("*");
                }
                System.out.println();
            }
        }

        if (m == 2) {
            for (int i = 0; i < n / 2 + 1; i++) {
                for (int j = 1; j < (n / 2 + 1) - i; j++) {
                    System.out.print(" ");
                }

                for (int k = 0; k < i + 1; k++) {
                    System.out.print("*");
                }
                System.out.println();
            }

            for (int i = 0; i < n - (n / 2 + 1); i++) { 
                for (int j = 0; j < i + 1; j++) {
                    System.out.print(" ");
                }

                for (int k = 0; k < n / 2 - i; k++) { 
                    System.out.print("*");
                }
                System.out.println();
            }
        }

        if (m == 3) { 
            for (int i = 0; i < n / 2 + 1; i++) { 
                for (int j = 0; j < i; j++) {
                    System.out.print(" ");
                }

                for (int k = 0; k < n - i * 2; k++) { 
                    System.out.print("*");
                }
                System.out.println();
            }

            for (int i = 0; i < n - (n / 2 + 1); i++) { 
                for (int j = 0; j < (n / 2 - 1) - i; j++) { 
                    System.out.print(" ");
                }

                for (int k = 0; k < 3 + (i * 2); k++) { 
                    System.out.print("*");
                }
                System.out.println();
            }
        }

        if (m == 4) { 
            for (int i = 0; i < n / 2 + 1; i++) { 
                for (int j = 0; j < i; j++) {
                    System.out.print(" ");
                }

                for (int k = 0; k < (n / 2 + 1) - i; k++) {
                    System.out.print("*");
                }
                System.out.println();
            }

            for (int i = 0; i < n - (n / 2 + 1); i++) { 
                for (int j = 0; j < n / 2; j++) {
                    System.out.print(" ");
                }

                for (int k = 0; k < (n % 2) + i + 1; k++) { 
                    System.out.print("*");
                }
                System.out.println();
            }
        }

    }
}

▷ n의 값을 5가 아닌 다른 값을 넣었을 때 나와야 하는 결과와 다르게 나오는 등의 오류를 잡는 부분이나, n이 5일때의 결과값의 규칙들을 찾는데도 꽤 오랜 시간이 걸렸음. 하다보니 결과값은 제대로 나왔지만 시간이 너무 오래 걸렸고 코드도 너무 복잡한 느낌이어서 다른 사람들의 풀이도 보면서 다시 코드를 짜봐야 할 것 같음. 이렇게 노가다 식으로 규칙 찾고 코드 짜고 하는게 맞는지 의문이 듦.