728x90
11. 플로이드의 삼각형
플로이드의 삼각형
이번 과제에서도 파라미터로 정수형 height를 받고, 높이가 height인 '직각 이등변 삼각형'을 출력할텐데요. 이번에는 * 대신 숫자가 순서대로 출력되는 플로이드의 삼각형입니다!
패딩 (Padding)
height가 5인 경우 가장 큰 값인 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
마찬가지로 height가 15인 경우 가장 큰 값인 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
예를 들어서 height가 5인 경우에 5 * (1 + 5) / 2는 15가 나오죠? 결과값을 문자열로 변환시키고, 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 |