ํฌ์ŠคํŠธ

๐ŸŒš ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด - Array

๐Ÿ’ซ ๋ฐฐ์—ด ํƒ€์ž…


๋™์งˆ์˜(homogeneous) ๋ฐ์ดํ„ฐ ์›์†Œ๋“ค์˜ ์—ฐ์†๋œ ๋ฐ์ดํ„ฐ ๋ชจ์Œ

๋ฐฐ์—ด์˜ ์š”์†Œ์— ๋Œ€ํ•œ ์ ‘๊ทผ์€ ์ฒจ์ž๋ฅผ ์ด์šฉ
์ฒจ์ž์— ๋ณ€์ˆ˜๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์‹ค์‹œ๊ฐ„ ์—ฐ์‚ฐ์ด ์ถ”๊ฐ€๋กœ ์š”๊ตฌ

๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด์—์„œ ๋ฐฐ์—ด์ด ์ œ๊ณต๋˜๋ฉฐ, ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋“ค์€ ๋™์ผํ•œ ํƒ€์ž…์— ์†ํ•ด์•ผ ํ•œ๋‹ค.

@ Python,ย ๋™์  ๋ฐฐ์—ด์˜ ํŠน์„ฑ์„ ๊ฐ€์ง„ ๋Œ€์ƒ์ฒด๋ฅผ โ€˜Listโ€™๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.

๐Ÿซง ์„ค๊ณ„ ๊ณ ๋ ค์‚ฌํ•ญ

์–ด๋–ค ํƒ€์ž…์ด ์ฒจ์ž์— ๋Œ€ํ•ด ์ ๋ฒ•ํ•œ๊ฐ€?
์ฒจ์ž ์‹์— ๋Œ€ํ•œ ๋ฒ”์œ„๊ฐ€ ๊ฒ€์‚ฌ๋˜๋Š”๊ฐ€? (C, ๊ฒ€์‚ฌ ์•ˆํ•จ)
์ฒจ์ž ๋ฒ”์œ„๋Š” ์–ธ์ œ ๋ฐ”์ธ๋”ฉ ๋˜๋Š”๊ฐ€?
๋ฐฐ์—ด ํ• ๋‹น์€ ์–ธ์ œ ์ผ์–ด๋‚˜๋Š”๊ฐ€?
๋ฐฐ์—ด์˜ ๊ธฐ์–ต ๊ณต๊ฐ„์ด ํ• ๋‹น๋  ๋•Œ ์ดˆ๊ธฐํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
์Šฌ๋ผ์ด์Šค ์œ ๋ฌด์™€ ํ˜•ํƒœ

๐Ÿซง ๋ฐฐ์—ด๊ณผ ์ƒ‰์ธ

๋ฐฐ์—ด์˜ ํŠน์ • ์š”์†Œ๋Š” ๋ฐฐ์—ด์˜ ์ด๋ฆ„๊ณผ ์ฒจ์ž(subscript) ํ˜น์€ ์ƒ‰์ธ(index)์— ์˜ํ•ด ์ฐธ์กฐ
๋ฐฐ์—ด์ด๋ฆ„(์ฒจ์ž/์ƒ‰์ธ - Subscript/Index) โ†’ ํŠน์ • ์›์†Œ

์›์†Œ ์ฐธ์กฐ๋ฅผ ์œ„ํ•ด ๋Œ€๊ด„ํ˜ธ []๋ฅผ ์‚ฌ์šฉ
์ฒจ์ž๋Š” ๋ณดํ†ต ์ •์ˆ˜ ํƒ€์ž…์„ ์‚ฌ์šฉ

์ฒจ์ž์˜ ๋ฒ”์œ„ ์˜ค๋ฅ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์— ์ž์ฃผ ๋‚˜ํƒ€๋‚˜๋Š” ํ˜„์ƒ, ๋ฒ”์œ„ ๊ฒ€์‚ฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ์–ธ์–ด์˜ ์‹ ๋ขฐ์„ฑ์„ ํ–ฅ์ƒ
@ C, ๋ฐฐ์—ด ๋ฒ”์œ„ ๊ฒ€์‚ฌ๋ฅผ ํ•˜์ง€ ์•Š์Œ
@ Java, Python : ๋ฐฐ์—ด ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„œ๋Š” ๊ฒฝ์šฐ ์‹คํ–‰์‹œ๊ฐ„์— ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ

๐Ÿซง ์ฒจ์ž ๋ฐ”์ธ๋”ฉ๊ณผ ๋ฐฐ์—ด ์œ ํ˜•

  • ๋ฐฐ์—ด ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ฒจ์ž ๋ฐ”์ธ๋”ฉ์€ ๋ณดํ†ต ์ •์ ์ด๋‚˜, ์ฒจ์ž ๊ฐ’ ๋ฒ”์œ„๋Š” ๋•Œ๋•Œ๋กœ ๋™์ ์œผ๋กœ ๋ฐ”์ธ๋”ฉ
    • ์ฒจ์ž ๋ฒ”์œ„์˜ ํ•˜ํ•œ์€ 0์œผ๋กœ ๊ณ ์ •@
  • ๋ฐฐ์—ด์˜ ์ข…๋ฅ˜ (์ฒจ์ž ๊ฐ’ ๋ฒ”์œ„์— ๋Œ€ํ•œ ๋ฐ”์ธ๋”ฉ, ๊ธฐ์–ต๊ณต๊ฐ„ ๋ฐ”์ธ๋”ฉ, ๊ธฐ์–ต๊ณต๊ฐ„์˜ ํ• ๋‹น ์žฅ์†Œ์— ๋”ฐ๋ฅธ)
    • ์ •์  ๋ฐฐ์—ด
    • ๊ณ ์ • ์Šคํƒ-๋™์  ๋ฐฐ์—ด
    • ์Šคํƒ-๋™์  ๋ฐฐ์—ด
    • ๊ณ ์ • ํž™-๋™์  ๋ฐฐ์—ด
    • ํž™-๋™์  ๋ฐฐ์—ด

๋™์  : ๋ฐฐ์—ด์ด ํŠน์ • ์ƒํ™ฉ์— ํ• ๋‹น๋จ (i.e. ์„ ์–ธ ํฌํ•จ๋œ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ)

1. ์ •์  ๋ฐฐ์—ด

1
2
3
4
5
int tempA[5] = { 1, 2, 3, 4, 5 };
void main()
{
	static int tempB[5] = { 1, 2, 3, 4, 5 };
}
  • ์ฒจ์ž ๋ฒ”์œ„๊ฐ€ ์ •์ ์œผ๋กœ ๋ฐ”์ธ๋”ฉ (์ปดํŒŒ์ผ ํƒ€์ž„์—)
  • ๊ธฐ์–ต๊ณต๊ฐ„ ํ• ๋‹น์ด ์ •์ ์œผ๋กœ (ํ”„๋กœ๊ทธ๋žจ์ด ๋๋‚  ๋•Œ ๊นŒ์ง€) ์ด๋ฃจ์–ด์ง„๋‹ค.
  • ๋™์ ์œผ๋กœ ํ• ๋‹น์ด๋‚˜ ํšŒ์ˆ˜๊ฐ€ ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํšจ์œจ์ด ์ข‹์ง€๋งŒ, ๊ธฐ์–ต๊ณต๊ฐ„์ด ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์‹œ๊ฐ„ ์ „์ฒด์— ๊ณ ์ •๋œ๋‹ค.

2. ๊ณ ์ • ์Šคํƒ-๋™์  ๋ฐฐ์—ด

1
2
3
4
void main()
{
	int temp[5] = { 1, 2, 3, 4, 5 };
}

์ฒจ์ž ๋ฒ”์œ„๊ฐ€ ์ •์ ์œผ๋กœ ๋ฐ”์ธ๋”ฉ ๋˜์ง€๋งŒ, ํ• ๋‹น์ด ์‹คํ–‰์‹œ๊ฐ„์ค‘์— ์ผ์–ด๋‚œ๋‹ค.
๊ธฐ์–ต๊ณต๊ฐ„์˜ ํšจ์œจ์„ฑ์ด ์ข‹๋‹ค.

3. ์Šคํƒ-๋™์  ๋ฐฐ์—ด

1
2
3
4
5
6
7
8
9
10
void main()
{
	int n;
	scanf("%d", &n);

    int temp[n];

    for (int i = 0; i < n; i++)
        temp[i] = i;
}
  • ์ฒจ์ž ๋ฒ”์œ„์™€ ๊ธฐ์–ต๊ณต๊ฐ„ ํ• ๋‹น ๋ชจ๋‘๊ฐ€ ์‹คํ–‰์‹œ๊ฐ„์ค‘์— ๋ฐ”์ธ๋”ฉ๋˜๋Š” ๋ฐฐ์—ด
    • Variable Length Array๋Š” C99, C11์—์„œ ์ง€์›ํ•˜๋‚˜ ํ‘œ์ค€ C์—์„œ๋Š” ์ง€์›ํ•˜์ง€ ์•Š์Œ
  • ์ผ๋‹จ ์ฒจ์ž ๋ฒ”์œ„๊ฐ€ ๋ฐ”์ธ๋”ฉ๋˜๊ณ  ๊ธฐ์–ต๊ณต๊ฐ„์ด ํ• ๋‹น๋˜๋ฉด ์ด ๋ฐ”์ธ๋”ฉ์€ ๋ณ€์ˆ˜์˜ ์กด์† ๊ธฐ๊ฐ„์— ๊ณ ์ •
  • ์žฅ์ : ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” ๊ทธ ๋ฐฐ์—ด์ด ์‚ฌ์šฉ๋˜๊ธฐ ์ „๊นŒ์ง€ ๋ชฐ๋ผ๋„ ๋˜๋ฏ€๋กœ ์œ ์—ฐ์„ฑ์ด ์ข‹๋‹ค
  • ๋‹จ์ : ์ด๋ฅผ ์œ„ํ•ด ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ์†๋„๊ฐ€ ๋Š๋ ค์ง€๊ณ  ๋ถˆ์•ˆํ•œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

4. ๊ณ ์ • ํž™-๋™์  ๋ฐฐ์—ด

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void main()
{
	int n;
	scanf("%d", &n);
	
	int *temp = NULL;
	
	temp = (int *)malloc(sizeof(int) * n);

	for (int i = 0; i < n; i++)
		temp[i] = i;

	free(temp);
	temp = NULL;
}
1
2
3
4
5
6
public static void main(String[] args)
{
	int[] nums = {0, 1, 2, 3, 4, 5};
	for(int i=0; i < nums.length; i++)
		System.out.println(nums[i]);
}
  • ์ฒจ์ž ๋ฒ”์œ„์™€ ๊ธฐ์–ต๊ณต๊ฐ„์˜ ๋ฐ”์ธ๋”ฉ์ด ๊ธฐ์–ต๊ณต๊ฐ„์ด ํ• ๋‹น๋œ ํ›„์— ๊ณ ์ •๋จ
  • ์ฒจ์ž ๋ฒ”์œ„์™€ ๊ธฐ์–ต๊ณต๊ฐ„์— ๋Œ€ํ•œ ๋ฐ”์ธ๋”ฉ์ด ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•  ๋•Œ ๋ฐœ์ƒ
  • ๊ธฐ์–ต ๊ณต๊ฐ„์ด ์Šคํƒ์ด ์•„๋‹Œ ํž™์— ํ• ๋‹น
  • ์žฅ์ : ์œ ์—ฐ์„ฑ
  • ๋‹จ์ : ์Šคํƒ๋ณด๋‹ค ๋Š๋ฆผ

5. ํž™-๋™์  ๋ฐฐ์—ด

1
2
3
4
5
6
7
8
9
10
11
12
13
nums = [1, 2, 3, 4, 5]

for item in nums:
	print(item)

nums.append(6)
nums.append(7)
nums.append(8)
nums.append(9)
nums.append(10)

for item in nums:
	print(item)
  • ์ฒจ์ž ๋ฒ”์œ„์™€ ๊ธฐ์–ต๊ณต๊ฐ„์˜ ํ• ๋‹น์ด ๋™์ ์œผ๋กœ ์ผ์–ด๋‚˜๋ฉฐ ๋ฐฐ์—ด์˜ ์กด์†๊ธฐ๊ฐ„์— ๋ฐ”๋€”์ˆ˜ ์žˆ์Œ
  • ์žฅ์ : ์œ ์—ฐ์„ฑ์ด ์ข‹์Œ
  • ๋‹จ์ : ํ• ๋‹น๊ณผ ํšŒ์ˆ˜์˜ ์‹œ๊ฐ„์ด ๊ธธ๋‹ค

๐Ÿซง ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”

๋ฐฐ์—ด์ด ๊ธฐ์–ต๊ณต๊ฐ„์— ํ• ๋‹น๋˜๋Š” ์‹œ์ ์— ๊ทธ ๋ฐฐ์—ด์„ ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ์„ ์ œ๊ณต

  • ๋ฐฐ์—ด์˜ ์ดˆ๊ธฐํ™” ํ—ˆ์šฉ
    • ๊ฐ€์žฅ ์ขŒ์ธก ์š”์†Œ์˜ ํฌ๊ธฐ๋Š” ์ƒ๋žต ๊ฐ€๋Šฅ, ์ด ๊ฒฝ์šฐ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํฌ๊ธฐ๋ฅผ ์„ค์ •
      • ์•”๋ฌต์  ์„ค์ •์ด๋ฏ€๋กœ ์‹ค์ˆ˜๋กœ ํ•ญ๋ชฉ์„ ๋นผ๋ฒ„๋ฆด ์ˆ˜ ์žˆ์Œ
      • int list[] = {4, 5, 7, 8};
      • char name[] = โ€œfreddieโ€;ย  ย // name๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š”?
      • charย *names[] = {โ€œBobโ€, โ€œJakeโ€, โ€œDarcieโ€};

๐Ÿซง ๋ฐฐ์—ด ์—ฐ์‚ฐ

๋ฐฐ์—ด ์—ฐ์‚ฐ์€ ๋ฐฐ์—ด ๋‹จ์œ„๋กœ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ฐ์‚ฐ
๋ฐฐ์ •, ์ ‘ํ•ฉ, ๋น„๊ต, ์Šฌ๋ผ์ด์Šค ๋“ฑ

  • C์˜ ๊ฒฝ์šฐ ๋ฐฐ์—ด ์—ฐ์‚ฐ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ -> ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ ์‚ฌ์šฉ

  • Java, C++, C#์€ ๋ฐฐ์—ด์ด ๊ฐ์ฒด๋กœ ์ œ๊ณต๋˜๋ฉฐ ๋ฉ”์†Œ๋“œ๋กœ ์ˆ˜ํ–‰

  • Python์€ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ์˜ ์š”์†Œ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ ์ด์งˆ์ ์ธ ์š”์†Œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Œ

    • ๋ฐฐ์ •, ์ ‘ํ•ฉ(+), ์›์†Œ ๋ฉค๋ฒ„์‰ฝ(in), ๋™์ผ์„ฑ ๋น„๊ต(is), ๋™๋“ฑ์„ฑ ๋น„๊ต(==)

@ APL : ๊ฐ•๋ ฅํ•œ ๋ฐฐ์—ด ์ฒ˜๋ฆฌ ์–ธ์–ด

๐Ÿซง ๋ฐฐ์—ด๊ณผ ์Šฌ๋ผ์ด์Šค

์Šฌ๋ผ์ด์Šค๋Š” ๋ฐฐ์—ด์˜ ์–ด๋–ค ๋ถ€๋ถ„ ๊ตฌ์กฐ(substructure)์ด๋‹ค.
Python, Ruby, Perl ๋“ฑ์˜ ์–ธ์–ด์—์„œ ๋ฐฐ์—ด์˜ ์Šฌ๋ผ์ด์Šค ์—ฐ์‚ฐ์„ ์ œ๊ณต

1
2
3
4
5
6
7
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(nums[0:7])
print(nums[2:])
print(nums[:6])
print(nums[::2])
print(nums[1::2])

๐Ÿซง ํ‰๊ฐ€

FORTRAN I์—์„œ ์†Œ๊ฐœ๋œ ํ›„ ๋ฐฐ์—ด์€ ๊ฑฐ์˜ ๋ชจ๋“  ์–ธ์–ด์— ํฌํ•จ ๋จ
๋ชจ๋“  ์ˆœ์„œ ํƒ€์ž…์„ ์ฒจ์ž๋กœ ํ—ˆ์šฉํ•˜๊ฑฐ๋‚˜, ์Šฌ๋ผ์ด์Šค ์—ฐ์‚ฐ๋“ฑ์˜ ์ง„๋ณด๊ฐ€ ์žˆ์—ˆ์Œ
ํŠนํžˆ ์ตœ๊ทผ ์—ฐ์ƒ ๋ฐฐ์—ด๋กœ ํ–ฅ์ƒ๋œ ํŠน์ง•์„ ์ œ๊ณต

๐Ÿ’ซ ์—ฐ์ƒ ๋ฐฐ์—ด - Associative array


์›์†Œ ๊ฐœ์ˆ˜์™€ ๋™์ผํ•œ ๊ฐœ์ˆ˜์˜ ๊ฐ’(ํ‚ค)๋“ค๋กœ ์ธ๋ฑ์‹ฑ๋˜๋Š”, ์ˆœ์„œ๋ฅผ ๊ฐ–์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ ์›์†Œ์˜ ๋ชจ์ž„
ํ‚ค(key)-๊ฐ’(value) ๊ตฌ์กฐ

  • ๊ตฌ์กฐ์™€ ์—ฐ์ƒ
    • ๊ตฌํ˜„์—์„œ ์›์†Œ๋“ค์ด ํ•ด์‹œ(hash) ํ•จ์ˆ˜๋กœ ์ €์žฅ๋˜๊ณ  ์ธ์ถœ๋จ
  • ์žฅ์  (vs ๋ฐฐ์—ด)
    • ๊ฐ€๋…์„ฑ๊ณผ ์ž‘์„ฑ๋ ฅ์„ ๋†’์ธ๋‹ค.
    • (ํ•ด์‹œ ํ•จ๋ฅผ ์จ์„œ) ์›์†Œ๋“ค์˜ ์ ‘๊ทผ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
    • ๋ชจ๋“  ์š”์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐฐ์—ด์ด ํšจ์œจ์ ์ž„
  • Python : ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ, ์‚ฌ์ „(dictionary)
    • ํ‚ค(key)๋Š” hashable ํ•ด์•ผํ•œ๋‹ค. โ†’ immutableํ•œ ๊ฐ’์ด์–ด์•ผ ํ•จ
    • ํ‚ค์™€ ๊ฐ’์‚ฌ์ด๋Š” ์ฝœ๋ก (:)์œผ๋กœ ๊ตฌ๋ถ„
์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.