정보처리산업기사 실기/알고리즘
응용 알고리즘 - 배열
미웡할꺼야
2020. 11. 16. 20:34
행 우선/열 우선 배열 채우기
문제 : 2차원 배열 A(5, 5)의 원소에 다음 그림과 같은 모습으로 값을 저장해 주는 알고리즘을 제시하라.
1 | 6 | 11 | 16 | 21 |
2 | 7 | 12 | 17 | 22 |
3 | 8 | 13 | 18 | 23 |
4 | 9 | 14 | 19 | 24 |
5 | 10 | 15 | 20 | 25 |
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
|
public class 열우선배열채우기 {
public static void main(String[] args) {
int a[][] = new int[5][5];
int v = 0; // 증가값.
int c = 0; // 배열의 열.
// 배열의 열 반복문.
do {
int r = 0; // 배열의 행.
// 배열의 행 반복분.
do {
v = v + 1;
a[r][c] = v;
r = r + 1;
} while (r <= 4);
c = c + 1;
} while (c <= 4);
for (int r = 0; r < 5; r++) {
for (c = 0; c < 5; c++) {
System.out.print(a[r][c] + "\t");
}
System.out.println();
}
/*
* 1 6 11 16 21
* 2 7 12 17 22
* 3 8 13 18 23
* 4 9 14 19 24
* 5 10 15 20 25
*/
}
}
|
cs |
삼각형 모양으로 배열 채우기
문제 : 2차원 배열 A(5, 5)의 원소에 다음 그림과 같은 모습으로 값을 저장해 주는 알고리즘을 제시하라.
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
|
public class 삼각형모양으로배열채우기 {
public static void main(String[] args) {
int a[][] = new int[5][5];
int v = 1; // 증가값.
int r = 0; // 행 인덱스 변수.
int c; // 열 인덱스 변수.
// 배열의 행 반복문.
do {
/*
* 행 값을 열 값에 대입하면
* 행이 증가됨에 따라 열 값이 증가하여
* 삼각형 모양의 배열로 채울 수 있다.
*/
c = r;
// 배열의 열 반복문.
do {
a[r][c] = v;
v = v + 1;
c = c + 1;
} while (c <= 4);
r = r + 1;
} while (r <= 4);
for (r = 0; r < 5; r++) {
for (c = 0; c < 5; c++) {
System.out.print(a[r][c] + "\t");
}
System.out.println();
}
/*
* 1 2 3 4 5
* 0 6 7 8 9
* 0 0 10 11 12
* 0 0 0 13 14
* 0 0 0 0 15
*/
}
}
|
cs |
모래시계 모양으로 배열 채우기
문제 : 2차원 배열 A(5, 5)의 원소에 다음 그림과 같은 모습으로 값을 저장해 주는 알고리즘을 제시하라.
1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | ||
9 | ||||
10 | 11 | 12 | ||
13 | 14 | 15 | 16 | 17 |
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
|
public class 모래시계모양으로배열채우기 {
public static void main(String[] args) {
int a[][] = new int[5][5];
int v = 1; // 증가값.
int m = 3; // 배열 중간 인덱스 값.
// 배열 중간 인덱스까지 값을 채우는 배열의 행 반복문.
for (int r = 0; r < m; r++) {
/*
* 배열의 행 인덱스가 증가됨에 따라
* 배열의 시작 열 인덱스 1증가, 마지막 열 인덱스 1감소
* 하는 배열의 열 반복문.
*/
for (int c = r; c < (5 - r); c++) {
a[r][c] = v;
v = v + 1;
}
}
// 배열 중간 인덱스 다음부터 값을 채우는 배열의 행 반복문.
for (int r = m; r <= 4; r++) {
/*
* 배열의 행 인덱스가 증가됨에 따라
* 배열의 시작 열 인덱스 1감소, 마지막 열 인덱스 1증가
* 하는 배열의 열 반복문.
*/
for (int c = (4 - r); c <= r; c++) {
a[r][c] = v;
v = v + 1;
}
}
for (int r = 0; r < 5; r++) {
for (int c = 0; c < 5; c++)
System.out.print(a[r][c] + "\t");
System.out.println();
}
/*
* 1 2 3 4 5
* 0 6 7 8 0
* 0 0 9 0 0
* 0 10 11 12 0
* 13 14 15 16 17
*/
}
}
|
cs |
달팽이 모양으로 배열 채우기
문제 : 2차원 배열 A(5, 5)의 원소에 1부터 25까지의 번호를 다음 그림과 같은 모습으로 저장해주는 알고리즘을 제시하라.
1 | 2 | 3 | 4 | 5 |
16 | 17 | 18 | 19 | 6 |
15 | 24 | 25 | 20 | 7 |
14 | 23 | 22 | 21 | 8 |
13 | 12 | 11 | 10 | 9 |
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
|
public class 달팽이모양으로배열채우기 {
public static void main(String[] args) {
int a[][] = new int[5][5];
int n = 0; // 증가값.
int s = 1; // 행,열 증감용 변수.
int i = 0; // 배열의 행 인덱스.
int j = -1; // 배열의 열 인덱스.
int k = 5; // 수행 횟수 변수.
// 달팽이 모양 배열 반복문.
while (true) {
// 달팽이 모양 배열의 행 반복문.
for (int p = 0; p < k; p++) {
n = n + 1;
j = j + s;
a[i][j] = n;
}
k = k - 1;
if (k <= 0)
break;
// 달팽이 모양 배열의 열 반복문.
for (int p = 0; p < k; p++) {
n = n + 1;
i = i + s;
a[i][j] = n;
}
s = s * (-1);
}
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++)
System.out.print(a[i][j] + "\t");
System.out.println();
}
/*
* 1 2 3 4 5
* 16 17 18 19 6
* 15 24 25 20 7
* 14 23 22 21 8
* 13 12 11 10 9
*/
}
}
|
cs |
마름모 모양으로 배열 채우기
문제 : 2차원 배열 A(5,5)의 원소에 다음 그림과 같은 모습으로 값을 저장해주는 알고리즘을 제시하라.
1 | ||||
3 | 5 | 7 | ||
9 | 11 | 13 | 15 | 17 |
19 | 21 | 23 | ||
25 |
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
|
public class 마름모모양으로배열채우기 {
public static void main(String[] args) {
int a[][] = new int[5][5];
int v = 1; // 증가값.
int m = 2; // 배열 중간 인덱스.
int cl = m; // 배열의 열 for문 초기값.
int cr = m; // 배열의 열 for문 범위값.
// 배열의 행 반복문.
for (int r = 0; r <= 4; r++) {
// 배열의 열 반복문.
for (int c = cl; c <= cr; c++) {
a[r][c] = v;
v = v + 2;
}
/*
* 배열 중간 인덱스 전까지
* 반복문 열 초기값 1씩 감소
* , 반복문 열 범위값 1씩 증가.
*/
if (r < m) {
cl = cl - 1;
cr = cr + 1;
/*
* 배열 중간 인덱스부터
* 반복문 열 초기값 1씩 증가
* , 반복문 열 범위값 1씩 감소.
*/
} else {
cl = cl + 1;
cr = cr - 1;
}
}
for (int r = 0; r < 5; r++) {
for (int c = 0; c < 5; c++)
System.out.print(a[r][c] + "\t");
System.out.println();
}
/*
* 0 0 1 0 0
* 0 3 5 7 0
* 9 11 13 15 17
* 0 19 21 23 0
* 0 0 25 0 0
*/
}
}
|
cs |
'ㄹ'자 모양으로 배열 채우기
문제 : 2차원 배열 A(5,5)의 원소에 다음 그림과 같이 'ㄹ'자 모양으로 값을 저장해 주는 알고리즘을 제시하라.
1 | 2 | 3 | 4 | 5 |
10 | 9 | 8 | 7 | 6 |
11 | 12 | 13 | 14 | 15 |
20 | 19 | 18 | 17 | 16 |
21 | 22 | 23 | 24 | 25 |
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
|
public class ㄹ자모양으로배열채우기 {
public static void main(String[] args) {
int a[][] = new int[5][5];
int v = 1; // 증가값.
int d = 1; // 방향 전환(증감용) 변수.
int c1 = 0; // 배열의 열 for문 초기값.
int c2 = 4; // 배열의 열 for문 범위값.
// 배열의 행 반복문.
for (int r = 0; r < 5; r++) {
// 배열의 열 반복문.
for (int c = c1; c != c2 + d; c = c + d) {
a[r][c] = v;
v = v + 1;
}
/*
* 한 행의 모든 열 값이 채워지면
* 배열의 열 for문 초기값과 범위값을 스와핑한 후
* 방향 전환 변수의 값도 "+ ,-" 스와핑 한다.
*/
int temp = c1; // 임시 변수.
c1 = c2;
c2 = temp;
d = -d;
}
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++)
System.out.print(a[i][j] + "\t");
System.out.println();
}
/*
* 1 2 3 4 5
* 10 9 8 7 6
* 11 12 13 14 15
* 20 19 18 17 16
* 21 22 23 24 25
*/
}
}
|
cs |
배열 회전시키기
문제 : 배열 A(5,5)를 시계 방향으로 90도 회전시켜 B(5,5)를 생성하는 알고리즘을 제시하라.
1 | 2 | 3 | 4 | 5 | 21 | 16 | 11 | 6 | 1 |
6 | 7 | 8 | 9 | 10 | 22 | 17 | 12 | 7 | 2 |
11 | 12 | 13 | 14 | 15 | 23 | 18 | 13 | 8 | 3 |
16 | 17 | 18 | 19 | 20 | 24 | 19 | 14 | 9 | 4 |
21 | 22 | 23 | 24 | 25 | 25 | 20 | 15 | 10 | 5 |
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
|
public class 배열회전시키기 {
public static void main(String[] args) {
// 원본 배열.
int a[][] = { { 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 } };
int b[][] = new int[5][5]; // 90도 회전 배열.
int n; // 배열 b의 열 번호 계산 변수.
// 원본 배열 행 반복문.
for (int r = 0; r <= 4; r++) {
// 90도 회전 배열 행 반복문.
for (int c = 0; c <= 4; c++) {
/*
* 원본 배열 행 인덱스가 증가됨에 따라
* 90도 회전 배열 열 인덱스는 감소.
*/
n = 4 - r;
/*
* 원본 배열의 값을 순차적으로 가져와
* 90도 회전 배열에 대입
*/
b[c][n] = a[r][c];
}
}
System.out.println("원본 배열");
for (int r = 0; r <= 4; r++) {
for (int c = 0; c <= 4; c++)
System.out.print(a[r][c] + "\t");
System.out.println();
}
System.out.println("\n90도 회전 배열");
for (int c = 0; c <= 4; c++) {
for (n = 0; n <= 4; n++)
System.out.print(b[c][n] + "\t");
System.out.println();
}
/*
* 원본 배열
* 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
*
* 90도 회전 배열
* 21 16 11 6 1
* 22 17 12 7 2
* 23 18 13 8 3
* 24 19 14 9 4
* 25 20 15 10 5
*/
}
}
|
cs |