๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Computer Science

[์ž๋ฃŒ๊ตฌ์กฐ] ๋ฐฐ์—ด - ์ •๋ฆฌ ๋ฐ ์—ฐ์Šต๋ฌธ์ œ

by Leica 2019. 11. 19.
๋ฐ˜์‘ํ˜•
์ด์ „ ํฌ์ŠคํŒ…

1. [์ž๋ฃŒ๊ตฌ์กฐ] ์ž๋ฃŒ๊ตฌ์กฐ๋ž€ ๋ฌด์—‡์ธ๊ฐ€? - ์ •๋ฆฌ ๋ฐ ์—ฐ์Šต๋ฌธ์ œ

https://atoz-develop.tistory.com/entry/entry/์ž๋ฃŒ๊ตฌ์กฐ-์ž๋ฃŒ๊ตฌ์กฐ๋ž€-๋ฌด์—‡์ธ๊ฐ€-์ •๋ฆฌ-๋ฐ-์—ฐ์Šต๋ฌธ์ œ

 

1. ๋ฐฐ์—ด์˜ ์ •์˜

๋ฐฐ์—ด(Array) :
- ์ธ๋ฑ์Šค์™€ ์›์†Œ๊ฐ’์˜ ์Œ(<index, value>)์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ง‘ํ•ฉ
- ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ๋“ค์€ ์ž๋ฃŒํ˜•๊ณผ ๊ธฐ์–ต ๊ณต๊ฐ„์˜ ํฌ๊ธฐ๊ฐ€ ๊ฐ™๋‹ค.
- ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฌผ๋ฆฌ์ ์ธ ์œ„์น˜๋ฅผ ์ˆœ์„œ์ ์œผ๋กœ ๊ฒฐ์ •ํ•˜๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.
- ๋ฐฐ์—ด์˜ ๋…ผ๋ฆฌ์ ์ธ ์ˆœ์„œ(์ธ๋ฑ์Šค)๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๋Š” ์›์†Œ๊ฐ’์˜ ๋ฌผ๋ฆฌ์ ์ธ ์ˆœ์„œ(๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ)์™€ ๋™์ผํ•˜๋‹ค.
- ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์›์†Œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์™€ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ํŠน์ • ์›์†Œ์˜ ์ฃผ์†Œ๊ฐ’์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
- ์ง์ ‘ ์ ‘๊ทผ(direct access) : ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•ด ์ ‘๊ทผํ•˜๋ฏ€๋กœ
- ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์œ ํ˜• ์ค‘ ์„ ํ˜• ๊ตฌ์กฐ์— ํ•ด๋‹นํ•œ๋‹ค.
- ๊ฐ ์›์†Œ์˜ ์ด๋ฆ„์€ ๊ณ ์œ ํ•œ ์ด๋ฆ„์ด ์—†๊ณ  ์›์†Œ์˜ ์œ„์น˜์— ๋”ฐ๋ผ ์ •ํ•ด์ง„๋‹ค.

 

๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ ์ถ”์ƒํ™”์™€ ๊ตฌ์ฒดํ™”(์ถœ์ฒ˜: ํ•œ๊ตญ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต)

  ๊ทธ๋ฆผ์˜ ์ขŒ์ธก์€ 16์ง„์ˆ˜๋กœ ํ‘œํ˜„๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์‹ค์ œ ์ฃผ์†Œ, ๊ฐ€์šด๋ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ๋ฐ์ดํ„ฐ, ์šฐ์ธก์€ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค์ด๋‹ค. ์ด์ฒ˜๋Ÿผ ๋ฐฐ์—ด์˜ ๋ฌผ๋ฆฌ์ ์ธ ์ €์žฅ ์ˆœ์„œ๋Š” ์ธ๋ฑ์Šค์˜ ์ˆœ์„œ์™€ ๋™์ผํ•˜๋‹ค. ์ธ๋ฑ์Šค๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง๊ด€์ ์œผ๋กœ ๋ฐ›์•„๋“ค์ด๊ธฐ ์œ„ํ•œ ์ถ”์ƒํ™”๋œ ๊ฐ’์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์ถ”์ƒํ™”๋œ ์ธ๋ฑ์Šค๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ํ•ด์„ํ•˜์—ฌ ๋ฌผ๋ฆฌ์ ์ธ ์‹ค์ œ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

 

2. ๋ฐฐ์—ด์˜ ์ถ”์ƒ ์ž๋ฃŒํ˜•(ADT)

  ์ด์ „ ํฌ์ŠคํŒ… [์ž๋ฃŒ๊ตฌ์กฐ] ์ž๋ฃŒ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?(๋งํฌ)์—์„œ ๋‹ค๋ฃฌ ๊ฒƒ๊ณผ ๊ฐ™์ด ์ถ”์ƒ ์ž๋ฃŒํ˜•์ด๋ž€ ์ž๋ฃŒ ์ง‘ํ•ฉ๊ณผ ์—ฐ์‚ฐ ์ง‘ํ•ฉ์˜ ๋ช…์„ธ์ด๋‹ค.

 

* Object(๊ฐ์ฒด)
<i∈Index, e∈Element> ์Œ๋“ค์˜ ์ง‘ํ•ฉ. Index๋Š” ์ˆœ์„œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜์˜ ์œ ํ•œ์ง‘ํ•ฉ์ด๊ณ  Element๋Š” ํƒ€์ž…์ด ๊ฐ™์€ ์›์†Œ์˜ ์ง‘ํ•ฉ

* Functions(์—ฐ์‚ฐ)
a∈Array; i∈index; x, item∈Element, n∈Integer์ธ ๋ชจ๋“  a, item, n์— ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์ด ์ •์˜๋œ๋‹ค. a๋Š” 0๊ฐœ ์ด์ƒ์˜ ์›์†Œ๋ฅผ ๊ฐ–๋Š” ๋ฐฐ์—ด, item์€ ๋ฐฐ์—ด์— ์ €์žฅ๋˜๋Š” ์›์†Œ, n์€ ๋ฐฐ์—ด์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ •์˜ํ•˜๋Š” ์ •์ˆ˜๊ฐ’์ด๋‹ค.

โ‘  Array create(n) ::= ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ n์ธ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•œ๋‹ค;
โ‘ก Element retrieve(a, i) ::=
    if(i∈Index) then {๋ฐฐ์—ด a์˜ i์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ์›์†Œ๊ฐ’ 'e'๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค;}
    else {์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค;}
โ‘ข Array store(a, i, e) ::=
    if(i∈Index) then {๋ฐฐ์—ด a์˜ i์ธ๋ฑ์Šค์— ์›์†Œ๊ฐ’ 'e'๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ฐฐ์—ด a๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค;}
    else {i๊ฐ€ ๋ฐฐ์—ด a์˜ ํฌ๊ธฐ๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ์—๋Ÿฌ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค;}

 

3. ๋ฐฐ์—ด ์—ฐ์‚ฐ์˜ ๊ตฌํ˜„

๋‹ค์Œ์€ ์œ„์—์„œ ์ •์˜ํ•œ ๋ฐฐ์—ด์˜ ์ถ”์ƒ ์ž๋ฃŒํ˜•์˜ ์—ฐ์‚ฐ์„ C์–ธ์–ด๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค. Element๋Š” ์ •์ˆ˜๋กœ ๊ฐ€์ •ํ•œ๋‹ค.

 

3-1. ๋ฐฐ์—ด์˜ ์ƒ์„ฑ(create)

1
2
3
4
5
6
7
void create(int n) {
    int a[n];
    int i;
    for(i=0, i<n, i++){
        a[i] = 0;
    }
}
cs

 

n=5์ผ ๋•Œ ๋ฐฐ์—ด ์ƒ์„ฑ ๊ฒฐ๊ณผ(์ถœ์ฒ˜: ํ•œ๊ตญ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต)

 

3-2. ๋ฐฐ์—ด์˜ ๊ฒ€์ƒ‰(retrieve)

1
2
3
4
5
6
7
8
9
10
#define array_size 5
int retrieve(int *a, int i) {
    if(i>=0 && i<array_size)
        return a[i];
    else {
        printf("Error\n");
        return(-1);
    }
 
 
cs

 

1๋ผ์ธ: ์ธ๋ฑ์Šค์˜ ๋ฒ”์œ„๋ฅผ #define์œผ๋กœ ์ •์˜ํ•œ๋‹ค. ์ธ๋ฑ์Šค i๊ฐ€ ์œ ํšจ ์ง‘ํ•ฉ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

2๋ผ์ธ: ๋ฐฐ์—ด์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜ a์™€ ์ธ๋ฑ์Šค i๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค.

3๋ผ์ธ: i๊ฐ€ Index ์œ ํšจ ์ง‘ํ•ฉ ๋ฒ”์œ„์— ํ•ด๋‹นํ•˜๋Š”์ง€ ๋น„๊ตํ•œ๋‹ค.

4๋ผ์ธ: ๋ฐฐ์—ด์˜ i๋ฒˆ์งธ ์›์†Œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

6~7๋ผ์ธ: i๊ฐ€ Index ์œ ํšจ ์ง‘ํ•ฉ ๋ฒ”์œ„์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋กœ "Error" ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  -1์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ข…๋ฃŒํ•œ๋‹ค.

 

(์ถœ์ฒ˜: ํ•œ๊ตญ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต)

  ๋ฐฐ์—ด์— ์›์†Œ๊ฐ€ ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด retrieve(a, 2)๋Š” a[2]์ธ 30์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

3-3. ๋ฐฐ์—ด์˜ ์ €์žฅ

1
2
3
4
5
6
#define array_size 5
void store(int *a, int i, int e) {
    if(i>=0 && i<array_size)
        a[i] = e;
    else printf("Error\n");
}
cs

 

2๋ผ์ธ: ๋ฐฐ์—ด์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜ a, ์ธ๋ฑ์Šค i, ์›์†Œ๊ฐ’ e๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค.

๋‚˜๋จธ์ง€๋Š” ๋ฐฐ์—ด์˜ ๊ฒ€์ƒ‰ ์—ฐ์‚ฐ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ธ๋ฑ์Šค i์˜ ๊ฐ’์ด Index ์œ ํšจ ์ง‘ํ•ฉ ๋ฒ”์œ„์— ํ•ด๋‹นํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์•„๋‹ˆ๋ฉด "Error" ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

(์ถœ์ฒ˜: ํ•œ๊ตญ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต)

  store(a, 3, 35)์˜ ๊ฒฐ๊ณผ๋Š” ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค.

 

4. 1์ฐจ์› ๋ฐฐ์—ด

- ์ธ๋ฑ์Šค๊ฐ€ ํ•œ ๊ฐœ์ธ ํ•œ ์ค„์งœ๋ฆฌ ๋ฐฐ์—ด

- ์˜ˆ: A[i]

- ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ•œ ์ค„๋กœ ํ• ๋‹น๋ฐ›๋Š”๋‹ค.

 

(์ถœ์ฒ˜: ํ•œ๊ตญ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต)

๋ฐฐ์—ด A์˜ ์ฒซ ๋ฒˆ์งธ ์›์†Œ A[0]์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ a๋ผ๊ณ  ํ•˜๊ณ  ๊ฐ ์ž๋ฃŒํ˜•์˜ ํฌ๊ธฐ k๋ฅผ ์•Œ๋ฉด A[i]์˜ ์ฃผ์†Œ๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

1์ฐจ์› ๋ฐฐ์—ด A[i]์˜ ์ฃผ์†Œ ๊ณ„์‚ฐ

์ฃผ์†Œ(A[i]) = ์ฃผ์†Œ(A[0]) + i * ์ž๋ฃŒํ˜•์˜ ํฌ๊ธฐ

 

6. 2์ฐจ์› ๋ฐฐ์—ด

2์ฐจ์› ํ–‰๋ ฌ (์ถœ์ฒ˜: ํ•œ๊ตญ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต)

- ์ธ๋ฑ์Šค๊ฐ€ 2๊ฐœ์ธ ๋ฐฐ์—ด

- ์˜ˆ: A[i][j]

- ํ•˜๋‚˜์˜ ์›์†Œ๋Š” ๋‘ ๊ฐœ์˜ ์ธ๋ฑ์Šค(i, j)์˜ ์Œ์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

- i๋Š” ํ–‰(row), j๋Š” ์—ด(column)์„ ํ‘œํ˜„ํ•œ๋‹ค.

- ํ–‰ ์šฐ์„  ๋ฉ”๋ชจ๋ฆฌ ์—ฐ์†ํ• ๋‹น, ์—ด ์šฐ์„  ๋ฉ”๋ชจ๋ฆฌ ์—ฐ์†ํ• ๋‹น ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

 

6-1. ํ–‰๋ ฌ์˜ ๋ฐฐ์—ด ํ‘œํ˜„

ํ–‰๋ ฌ์„ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๊ตฌํ˜„ํ•  ๋•Œ 2์ฐจ์› ๋ฐฐ์—ด์„ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

 

ํ–‰๋ ฌ์˜ 2์ฐจ์› ๋ฐฐ์—ด ํ‘œํ˜„ (์ถœ์ฒ˜: ํ•œ๊ตญ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต)

ํ–‰๋ ฌ์€ ํ–‰๊ณผ ์—ด๋กœ ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ ์ปดํ“จํ„ฐ์—์„œ ํ‘œํ˜„ํ•  ๋•Œ ๋™์ผํ•œ ํ˜•ํƒœ์ธ 2์ฐจ์› ๋ฐฐ์—ด์ด ์ ํ•ฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

6-2. 2์ฐจ์› ํ–‰๋ ฌ์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐฉ์‹

6-2-1. ํ–‰ ์šฐ์„  ์ €์žฅ ๋ฐฉ์‹

2์ฐจ์› ํ–‰๋ ฌ์˜ ํ–‰ ์šฐ์„  ์ €์žฅ (์ถœ์ฒ˜: ํ•œ๊ตญ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต)

ํ–‰ ์šฐ์„  ํ• ๋‹น ๋ฐฉ์‹์€ ๊ฐ€๋กœ์˜ 1์ฐจ์› ๋ฐฐ์—ด ๋‹จ์œ„๋กœ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ• ๋‹น๋ฐ›๋Š”๋‹ค. ์ฆ‰ ํ•˜๋‚˜์˜ ํ–‰์ด ์—ฐ์†์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ• ๋‹น๋ฐ›๊ณ  ๋‹ค์Œ ํ–‰์ด ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์—ฐ์†์ ์œผ๋กœ ํ• ๋‹น๋ฐ›๋Š”๋‹ค.

 

[์ฐธ๊ณ ] ํ–‰ ์šฐ์„  ์ €์žฅ ๋ฐฉ์‹์˜ 2์ฐจ์› ๋ฐฐ์—ด(MxN) ์ฃผ์†Œ ๊ณ„์‚ฐ

์ฃผ์†Œ(A[i][j]) = ์ฃผ์†Œ(A[0][0]) + i * N * ์ž๋ฃŒํ˜•์˜ ํฌ๊ธฐ + j * ์ž๋ฃŒํ˜•์˜ ํฌ๊ธฐ

 

6-2-2. ์—ด ์šฐ์„  ์ €์žฅ ๋ฐฉ์‹

2์ฐจ์› ํ–‰๋ ฌ์˜ ์—ด ์šฐ์„  ์ €์žฅ (์ถœ์ฒ˜: ํ•œ๊ตญ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต)

์—ด ์šฐ์„  ํ• ๋‹น ๋ฐฉ์‹์€ ์„ธ๋กœ์˜ 1์ฐจ์› ๋ฐฐ์—ด ๋‹จ์œ„๋กœ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ• ๋‹น๋ฐ›๋Š”๋‹ค. ์ฆ‰ ํ•˜๋‚˜์˜ ์—ด์ด ์—ฐ์†์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ• ๋‹น๋ฐ›๊ณ  ๋‹ค์Œ ์—ด์ด ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์—ฐ์†์ ์œผ๋กœ ํ• ๋‹น๋ฐ›๋Š”๋‹ค.

 

[์ฐธ๊ณ ] ์—ด ์šฐ์„  ์ €์žฅ ๋ฐฉ์‹์˜ 2์ฐจ์› ๋ฐฐ์—ด ์ฃผ์†Œ ๊ณ„์‚ฐ

์ฃผ์†Œ(A[i][j]) = ์ฃผ์†Œ(A[0][0]) + i * ์ž๋ฃŒํ˜•์˜ ํฌ๊ธฐ + j * M * ์ž๋ฃŒํ˜•์˜ ํฌ๊ธฐ

 

  ๊ฒฐ๊ตญ '๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฌผ๋ฆฌ์ ์ธ ์ €์žฅ ์ˆœ์„œ์™€ ์ถ”์ƒ์ ์ธ ์›์†Œ์˜ ์ˆœ์„œ๊ฐ€ ์ผ์น˜ํ•œ๋‹ค'๋Š” ๋ฐฐ์—ด์˜ ์„ฑ์งˆ์€ 2์ฐจ์› ๋ฐฐ์—ด์—์„œ๋„ ๋™์ผํ•˜๋‹ค. ์ฆ‰ 2์ฐจ์› ๋ฐฐ์—ด๋„ 1์ฐจ์› ๋ฐฐ์—ด๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ(MxN), ์ฒซ ๋ฒˆ์งธ ์›์†Œ์˜ ์ฃผ์†Œ, ์ธ๋ฑ์Šค, ์ž๋ฃŒํ˜•์˜ ํฌ๊ธฐ๋ฅผ ํ†ตํ•ด ํŠน์ • ์›์†Œ์˜ ์ฃผ์†Œ๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฐฐ์—ด์˜ ํŠน์„ฑ ์ค‘ ํ•˜๋‚˜์ธ '์ง์ ‘ ์ ‘๊ทผ(direct access)'์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

7. ํฌ์†Œํ–‰๋ ฌ(Sparse Matrix)

- ์›์†Œ๊ฐ’์ด 0์ธ ์›์†Œ๊ฐ€ ๊ทธ๋ ‡์ง€ ์•Š์€ ์›์†Œ๋ณด๋‹ค ์ƒ๋Œ€์ ์œผ๋กœ ๋งŽ์€ ํ–‰๋ ฌ

 

ํฌ์†Œํ–‰๋ ฌ (์ถœ์ฒ˜: ํ•œ๊ตญ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต)

- ํฌ์†Œํ–‰๋ ฌ์„ 2์ฐจ์› ๋ฐฐ์—ด๋กœ ํ‘œํ˜„ ์‹œ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„ ๋ฐœ์ƒ

 

ํฌ์†Œํ–‰๋ ฌ์˜ ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ดํ‘œํ˜„ (์ถœ์ฒ˜: ํ•œ๊ตญ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต)

- ๋”ฐ๋ผ์„œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‚ญ๋น„๋ฅผ ๋ง‰๊ณ  ์ฒ˜๋ฆฌ์˜ ํšจ์œจ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด 0์ด ์•„๋‹Œ ๊ฐ’๋งŒ์„ ๋”ฐ๋กœ ๋ชจ์•„ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ• ํ•„์š”

 

ํฌ์†Œํ–‰๋ ฌ์˜ ํšจ์œจ์  ๋ฐฐ์—ด ํ‘œํ˜„

- 0์ด ์•„๋‹Œ ๊ฐ ์›์†Œ๋ฅผ (ํ–‰๋ฒˆํ˜ธ, ์—ด๋ฒˆํ˜ธ, ์›์†Œ๊ฐ’)์˜ ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์šฐ์ธก๊ณผ ๊ฐ™์€ 2์ฐจ์› ๋ฐฐ์—ด๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅ

- ์šฐ์ธก ๋ฐฐ์—ด์˜ [0,0]์€ ์›๋ณธ ๋ฐฐ์—ด์˜ ํ–‰ ์ˆ˜, [0,1]์€ ์›๋ณธ ๋ฐฐ์—ด์˜ ์—ด ์ˆ˜, [0,2]๋Š” 0์ด ์•„๋‹Œ ์›์†Œ๊ฐ’์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

- 1ํ–‰๋ถ€ํ„ฐ๋Š” ์ฐจ๋ก€๋กœ ์›๋ณธ ๋ฐฐ์—ด์˜ ํ–‰๋ฒˆํ˜ธ, ์—ด๋ฒˆํ˜ธ, ๊ฐ’์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

- ์˜ˆ๋กœ 7ํ–‰์— 5, 3, 91์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š”๋ฐ, ์ขŒ์ธก ์›๋ณธ ๋ฐฐ์—ด์—์„œ [5,3]์— 91์ด ์ €์žฅ๋˜์–ด ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

8. ์—ฐ์Šต๋ฌธ์ œ

1. ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์œ ํ˜• ์ค‘ ์„ ํ˜• ๊ตฌ์กฐ์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ธ๊ฐ€?
โ‘  ๋ฐฐ์—ด
โ‘ก ๊ทธ๋ž˜ํ”„
โ‘ข ํŠธ๋ฆฌ
โ‘ฃ ํžข

2. ์ง€๋ฌธ์˜ (๊ฐ€), (๋‚˜)์— ์ ํ•ฉํ•œ ๊ฒƒ์€?
(๊ฐ€)์˜ ๊ฐ ์›์†Œ์˜ ์ด๋ฆ„์€ ๊ณ ์œ ํ•œ ์ด๋ฆ„์ด ์—†๊ณ  ์›์†Œ์˜ ์œ„์น˜์— ๋”ฐ๋ผ ์ •ํ•ด์ง€๋ฏ€๋กœ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†์œผ๋‚˜, (๋‚˜)๋Š”(์€) ๊ฐ ์›์†Œ๋งˆ๋‹ค ๊ณ ์œ ํ•œ ์ด๋ฆ„์œผ๋กœ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.
โ‘  ๋ฆฌ์ŠคํŠธ, ๋ฐฐ์—ด
โ‘ก ๋ฆฌ์ŠคํŠธ, ๋ ˆ์ฝ”๋“œ
โ‘ข ๋ฐฐ์—ด, ๋ฆฌ์ŠคํŠธ
โ‘ฃ ๋ฐฐ์—ด, ๋ ˆ์ฝ”๋“œ

3. ์ˆœ์„œ๋ฅผ ๊ฐ€์ง„ ์›์†Œ๋“ค์˜ ์ˆœ์—ด๋กœ์„œ ๋ฌผ๋ฆฌ์  ์ˆœ์„œ๊ฐ€ ๋…ผ๋ฆฌ์  ์ˆœ์„œ์™€ ์ผ์น˜ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฌด์—‡์ธ๊ฐ€?
โ‘  ์ˆœ์„œ ๋ฆฌ์ŠคํŠธ
โ‘ก ๋ฐฐ์—ด
โ‘ข ํ
โ‘ฃ ์Šคํƒ

4. ๋ฐฐ์—ด์— ๋Œ€ํ•œ ์„ค๋ช…์œผ๋กœ ํ‹€๋ฆฐ ๊ฒƒ์€ ๋ฌด์—‡์ธ๊ฐ€?
โ‘  ์ธ๋ฑ์Šค์™€ ์›์†Œ๊ฐ’(<index, value>)์˜ ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ง‘ํ•ฉ์ด๋‹ค.
โ‘ก ์›์†Œ๋“ค์ด ๋ชจ๋‘ ๊ฐ™์€ ์ž๋ฃŒํ˜•์ด๋‹ค.
โ‘ข ๊ตฌ์„ฑ ์›์†Œ๋“ค์˜ ๋…ผ๋ฆฌ์  ๊ด€๊ณ„์™€ ์›์†Œ์˜ ์ €์žฅ ์œ„์น˜๋Š” ๋ฌด๊ด€ํ•˜๋‹ค.
โ‘ฃ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๊ฐ’๊ณผ ์ถ”์ƒํ™”๋œ ์ธ๋ฑ์Šค๊ฐ’์ด ๊ด€๋ จ๋˜์–ด ์žˆ๋‹ค.

5. ์•„๋ž˜๋Š” ๋ฐฐ์—ด๊ฐ’์˜ ์ €์žฅ์„ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค. [๊ฐ€]์— ๋“ค์–ด๊ฐˆ ๊ฐ€์žฅ ์•Œ๋งž์€ ์ฝ”๋“œ๋Š” ๋ฌด์—‡์ธ๊ฐ€?
#define array_size 5
void store(int *a, int i, int e) {
    if( [๊ฐ€] ) a[i] = e;
    else printf("Error\n");
}
โ‘  i >= 0 && i < array_size
โ‘ก i >= 0 || i < array_size
โ‘ข i <= 0 && i < array_size
โ‘ฃ i <= 0 || i < array_size

6. ๋‹ค์Œ ์„ค๋ช… ์ค‘ ํ‹€๋ฆฐ ๊ฒƒ์€ ๋ฌด์—‡์ธ๊ฐ€?
โ‘  ๋ฐฐ์—ด์€ ์ธ๋ฑ์Šค์™€ ์›์†Œ๊ฐ’์˜ ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
โ‘ก ๋ฐฐ์—ด์˜ ์ˆœ์„œ๋Š” ์›์†Œ๊ฐ’์ด ์ €์žฅ๋˜๋Š” ๋ฌผ๋ฆฌ์ ์ธ ์œ„์น˜์™€ ์•„์ฃผ ๋ฐ€์ ‘ํ•œ ์ƒ๊ด€์ด ์žˆ๋‹ค.
โ‘ข ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๊ฐ’์„ ์ด์šฉํ•ด์„œ ์›์†Œ๊ฐ’์— ์ง์ ‘ ์ ‘๊ทผํ•œ๋‹ค.
โ‘ฃ ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ๊ฐ’์˜ ์˜๋ฏธ์ ์ธ ์ˆœ์„œ๋Š” ์ธ๋ฑ์Šค์˜ ์ˆœ์„œ์™€ ์ผ์น˜ํ•œ๋‹ค.

7. ๋‹ค์Œ์™€ ๊ฐ™์€ ํ–‰๋ ฌ์ด ํ–‰์šฐ์„  ๋ฐฉ์‹์œผ๋กœ ์ €์žฅ๋œ๋‹ค๋ฉด, [3,4]์˜ ๋‹ค์Œ์— ์ €์žฅ๋˜๋Š” ํ–‰๋ ฌ์˜ ์›์†Œ๋Š” ๋ฌด์—‡์ธ๊ฐ€?
โ‘  [3,5]
โ‘ก [3,3]
โ‘ข [4,4]
โ‘ฃ [4,3]

 

์ •๋‹ต โ–ผ

๋”๋ณด๊ธฐ

1 : โ‘ 
2 :
โ‘ฃ
3 :
โ‘ก
4 : โ‘ข
5 : โ‘ 
6 : โ‘ฃ
7 : โ‘ 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€