11. 플로이드의 삼각형

728x90

11. 플로이드의 삼각형

플로이드의 삼각형

 이번 과제에서도 파라미터로 정수형 height를 받고, 높이가 height인 '직각 이등변 삼각형'을 출력할텐데요. 이번에는 * 대신 숫자가 순서대로 출력되는 플로이드의 삼각형입니다!

 

패딩 (Padding)

 

 height5인 경우 가장 큰 값인 15는 두 자리 수입니다. 그러면 한 자리 수 값들을 출력할 때 앞에 띄어쓰기(" ")를 한 칸씩 해줘야 합니다.

 

 이렇게 나오면 안 되고,

 

1
2 3
4 5 6
7 8 9 10
11 12 13 14 15

 

 이렇게 나와야 합니다.

 

 1 
 2  3 
 4  5  6 
 7  8  9 10 
11 12 13 14 15

 

 마찬가지로 height15인 경우 가장 큰 값인 120은 세 자리 수입니다. 따라서 한 자리 수 값들 앞에는 띄어쓰기 두 칸을 해줘야 하고, 두 자리 수 값들 앞에는 띄어쓰기 한 칸을 해줘야 합니다.

 

 이렇게 나오면 안 되고,

 

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 
29 30 31 32 33 34 35 36 
37 38 39 40 41 42 43 44 45 
46 47 48 49 50 51 52 53 54 55 
56 57 58 59 60 61 62 63 64 65 66 
67 68 69 70 71 72 73 74 75 76 77 78 
79 80 81 82 83 84 85 86 87 88 89 90 91 
92 93 94 95 96 97 98 99 100 101 102 103 104 105 
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120

 

이렇게 나와야 합니다.

 

  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 
 29  30  31  32  33  34  35  36 
 37  38  39  40  41  42  43  44  45 
 46  47  48  49  50  51  52  53  54  55 
 56  57  58  59  60  61  62  63  64  65  66 
 67  68  69  70  71  72  73  74  75  76  77  78 
 79  80  81  82  83  84  85  86  87  88  89  90  91 
 92  93  94  95  96  97  98  99 100 101 102 103 104 105 
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120

 

힌트

 

 앞에 패딩을 넣는 게 이 과제의 가장 어려운 부분일 수 있습니다. 패딩을 넣기 위해서 먼저 알아야할 것은 가장 큰 값입니다.

 

 가장 큰 값은 1부터 height까지의 합인데, 이를 구하기 위해서는 이 공식을 따르면 됩니다.

 

height * (height + 1) / 2

 

 예를 들어서 height5인 경우에 5 * (1 + 5) / 215가 나오죠? 결과값을 문자열로 변환시키고, length 속성을 보면 최대값의 길이를 알 수 있습니다.

 

테스트

 

첫번째 = 3

두번째 = 5

세번째 = 15


이 실행결과가 나와야 합니다.

1 
2 3 
4 5 6 
----------
 1 
 2  3 
 4  5  6 
 7  8  9 10 
11 12 13 14 15 
----------
  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 
 29  30  31  32  33  34  35  36 
 37  38  39  40  41  42  43  44  45 
 46  47  48  49  50  51  52  53  54  55 
 56  57  58  59  60  61  62  63  64  65  66 
 67  68  69  70  71  72  73  74  75  76  77  78 
 79  80  81  82  83  84  85  86  87  88  89  90  91 
 92  93  94  95  96  97  98  99 100 101 102 103 104 105 
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120

A. 해설

ShapePrinter 클래스

public class ShapePrinter {
    public void printFloydsPyramid(int height) {
        int num = 1;
        // 제일 큰 숫자의 정수형을 문자열로 변환 (자릿수를 구하기 위해서)
        String max = String.valueOf(height * (height + 1) / 2);
        // 행 만들기
        for (int i = 1; i <= height; i++) {
            // 열 만들기
            for (int j = 1; j <= i; j++) {
                // 현재 숫자의 정수형을 문자열로 변환 (자릿수를 구하기 위해서)
                String stringNum = String.valueOf(num);
                int num1 = stringNum.length();
                // 제일 큰 숫자의 자릿수와 현재 숫자의 자릿수의 차이만큼 " " 넣기
                while (max.length() - num1 != 0) {
                    System.out.print(" ");
                    num1 += 1;
                }
                // 문자열로 변환해 주었던 현재 숫자를 정수형으로 변환
                num = Integer.parseInt(stringNum);
                System.out.print(num + " ");
                num += 1;
            }
            System.out.println();
        }

    }
}

 

Main 클래스

public class Main {
    public static void main(String[] args) {
        ShapePrinter printer = new ShapePrinter();

        // 테스트 1
        printer.printFloydsPyramid(3);
        System.out.println("----------");
        
        // 테스트 2
        printer.printFloydsPyramid(5);
        System.out.println("----------");
        
        // 테스트 3
        printer.printFloydsPyramid(15);
    }
}

 

 

 

 

 

출처 | 코드잇 (자바 기초)

728x90

'💠문제 풀이 > Java 문제 풀이' 카테고리의 다른 글

10. 피라미드 그리기  (0) 2021.10.06
09. 삼각형 그리기  (0) 2021.10.06
08. 두 원소의 차 중 최댓값 구하기  (0) 2021.10.06
07. 평균값 계산기  (0) 2021.10.06
06. 특가 할인 매장  (0) 2021.10.05