삼각형의 높이 N을 입력받아서 아래와 같이 숫자 0부터 달팽이 모양으로 차례대로 채워진 삼각형을 출력하는 프로그램을 작성하시오.
< 처리조건 >
왼쪽 위부터 시계방향으로 오른쪽 아래로 이동하면서 숫자 0부터 N개를 채우고 다시 왼쪽으로, 다음은 위쪽으로 반복하면서 채워 나간다. (숫자 9 다음에는 0부터 다시 시작한다.)
마름모의 한변의 길이 N(N의 범위는 100 이하의 양의 정수)을 입력받는다.
주어진 형태대로 높이가 N인 달팽이 삼각형을 출력한다. 숫자 사이는 한 개의 공백으로 구분한다.
[Copy]
6 |
[Copy]
0
4 1
3 5 2
2 0 6 3
1 9 8 7 4
0 9 8 7 6 5 |
이것도 저번 문제들과 비슷한 문제네요. 즉, 배열을 사용하면 쉽게 해결할 수 있습니다.
숫자를 출력하긴 해야하지만 숫자가 들어가지 않는 곳은 값이 들어가면 안되기 때문에 저는 char 배열을 사용했습니다.
추가적으로 최근에 코드의 가독성을 향상시키는 연습을 하고 있어서 최대한 가독성을 생각하며 작성하였습니다.
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 |
#include <iostream>
using namespace std;
enum Direction{
RIGHTDOWN,
LEFT,
UP
};
int main(void) {
int height;
char num = '0';
char **arr;
int direction = RIGHTDOWN;
bool isChanged = true;
cin >> height;
// 입력에 대한 예외 처리
if (height < 0 || height > 100) {
cout << "INPUT ERROR" << endl;
exit(0);
}
// 2차원 배열 동적 할당
arr = new char*[height];
for (int i = 0; i < height; ++i)
arr[i] = new char[height];
// 2차원 배열 초기화
for (int i = 0; i < height; ++i)
for (int j = 0; j < height; ++j)
arr[i][j] = ' ';
// 배열의 인덱싱 용 변수
int x, y;
x = y = 0;
// 데이터를 더 이상 변화 시키지 않을 때 까지 반복한다.
while (isChanged) {
switch (direction)
{
case RIGHTDOWN:
arr[y][x] = num++;
if (x + 1 == height || y + 1 == height || arr[y + 1][x + 1] != ' ') {
direction = LEFT;
--x;
}
else {
++x;
++y;
}
break;
case LEFT:
arr[y][x] = num++;
if (x == 0 || arr[y][x - 1] != ' ') {
direction = UP;
--y;
}
else {
--x;
}
break;
case UP:
arr[y][x] = num++;
if (y == 0 || arr[y-1][x] != ' ') {
direction = RIGHTDOWN;
++x;
++y;
}
else {
--y;
}
break;
}
// 데이터를 0에서 9까지로 제한
if (num > '9')
num = '0';
//종료 조건 부여
if (arr[y][x] != ' ')
isChanged = false;
}
// 출력
for (int i = 0; i < height; ++i) {
for (int j = 0; j < height; ++j)
cout << arr[i][j] << ' ';
cout << endl;
}
// 2차원 배열 메모리 해제
for (int i = 0; i < height; ++i)
delete[] arr[i];
delete[] arr;
}
|
cs |
JUNGOL) 문제은행) 실력키우기) 달팽이삼각형