🀷🏼‍♀️ Etc.../- C, C++, Python, Android

[C μ–Έμ–΄] 1차원 λ°°μ—΄μ˜ 기초

Wonit 2021. 6. 23. 00:59

λ°°μ—΄

 

CS λΆ„μ•Όμ—μ„œ 배열은 κ°€μž₯ 기본적인 μžλ£Œκ΅¬μ‘°μ΄λ‹€.

 

배열은 같은 데이터 νƒ€μž…μ˜ 데이터듀이 순차적으둜 μ €μž₯λ˜λŠ” μžλ£Œκ΅¬μ‘°μ΄λ‹€. 즉 λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°€ μ—°μ†λ˜μ–΄μ•Ό ν•œλ‹€.

 

λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°€ μ—°μ†λ˜μ–΄μ•Ό ν•œλ‹€λŠ” νŠΉμ„± λ•Œλ¬Έμ— μž„μ˜λ‘œ λ°°μ—΄μ˜ 크기λ₯Ό λŠ˜λ¦¬κ±°λ‚˜ μ€„μ΄λŠ” 것이 λΆˆκ°€λŠ₯ ν•˜λ‹€λŠ” νŠΉμ„±μ΄ μ‘΄μž¬ν•œλ‹€.

 

κ·Έλž˜μ„œ λ§Œμ•½ λ°°μ—΄μ˜ 크기가 λŠ˜μ–΄λ‚˜μ•Όν•  λ•ŒλŠ” μƒˆλ‘œμš΄ 배열을 λ§Œλ“€κ³  κΈ°μ‘΄ λ‚΄μš©μ„ λ³΅μ‚¬ν•˜λŠ” ν˜•νƒœλ‘œ μ‚¬μš©ν•˜κ³€ ν•œλ‹€.

 

μ΄λ ‡κ²Œλ§Œ λ³Έλ‹€λ©΄ 배열이 μ•ˆ 쒋아보일 수 μžˆλ‹€. μžλ£Œκ΅¬μ‘°μ— λ“±μž₯ν•˜λŠ” μ—°κ²° λ¦¬μŠ€νŠΈκ°€ 더 쒋아보일 수 μžˆμ§€λ§Œ λͺ¨λ“  μƒν™©μ—μ„œ 배열이 μ•ˆ 쒋은 것은 μ•„λ‹ˆλ‹€.

 

배열은 index 값을 ν† λŒ€λ‘œ μ›μ†Œμ— μ ‘κ·Όν•˜κΈ° λ•Œλ¬Έμ— νƒμƒ‰μ—μ„œμ˜ μ‹œκ°„ λ³΅μž‘λ„κ°€ O(1) 으둜 μƒμˆ˜ μ‹œκ°„μ΄ λ“ λ‹€.

 

κ·Έλž˜μ„œ κ°„λ‹¨ν•œ κ³³μ—μ„œ 자주 μ‚¬μš©λœλ‹€.

 

C μ–Έμ–΄μ—μ„œμ˜ λ°°μ—΄

 

C μ–Έμ–΄ μ—μ„œ 배열은 κΈ°λ³Έ μžλ£Œν˜•μœΌλ‘œ μ œκ³΅λœλ‹€.

 

μ•žμ„œ μ΄μ•ΌκΈ°ν–ˆλ“― 배열은 κ³ μ •λœ 크기의 μ—°μ†λœ λ©”λͺ¨λ¦¬λΌκ³  ν–ˆμ—ˆλ‹€.

 

그럼 이런 배열이 μ™œ μ‚¬μš©λ μ§€ 생각해봐야 ν•œλ‹€.

 

λ§Œμ•½ λ‹€μŒκ³Ό 같이 λ™μΌν•œ 데이터 νƒ€μž…μ˜ 데이터λ₯Ό 관리해야 ν•œλ‹€λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ?

 

int student1, student2, student3, student4, student5, student6;

student1 = 88;
student2 = 89;
student3 = 73;
student4 = 65;
student5 = 99;
student6 = 100;

 

학점을 μ €μž₯ν•΄μ•Ό ν•œλ‹€κ³  κ°€μ •ν–ˆμ„ λ•Œ μœ„μ™€ 같은 방식은 맀우 λΉ„νš¨μœ¨μ μ΄λ‹€.

 

λ™μΌν•œ 데이터 νƒ€μž…μΈ int ν˜• 데이터인 학점을 배열을 μ΄μš©ν•œλ‹€λ©΄ 맀우 νŽΈλ¦¬ν•˜κ²Œ 관리할 수 μžˆλ‹€.

 

int student[] = {88, 89, 73, 65, 99, 100};

// ν˜Ήμ€ λ‹€μŒκ³Ό 같이 ν• λ‹Ήν•˜λŠ” 것도 κ°€λŠ₯ν•˜λ‹€
int teacher[6];

teacher[0] = 88;
teacher[1] = 89;
teacher[2] = 73;
teacher[3] = 65;
teacher[4] = 99;
teacher[5] = 100;

 

λ°°μ—΄μ˜ 인덱슀

 

λ§Œμ•½ λ°°μ—΄μ˜ νŠΉμ • μˆœμ„œμ˜ 값을 얻고싢을 λ•ŒλŠ” μ–΄λ–»κ²Œ ν• κΉŒ?

 

즉, 3λ²ˆμ§Έμ— μœ„μΉ˜ν•œ 값을 κ°€μ Έμ˜€κ³ μ‹Άμ„ λ•ŒλŠ” 인덱슀λ₯Ό μ΄μš©ν•  수 μžˆλ‹€.

 

λ°°μ—΄μ˜ μΈλ±μŠ€λž€ 배열에 μ €μž₯된 λ°μ΄ν„°μ˜ μˆœμ„œ 번호λ₯Ό μ˜λ―Έν•œλ‹€.

μš°λ¦¬λŠ” λ°°μ—΄μ˜ 인덱슀λ₯Ό μ΄μš©ν•΄μ„œ λ°°μ—΄μ˜ νŠΉμ • 값에 μ ‘κ·Όν•  수 μžˆλ‹€.

 

기본적인 μ‚¬μš© 방법은 λ‹€μŒκ³Ό κ°™λ‹€.

 

#include <assert.h>

int main() {
    int student[] = {88, 89, 73, 65, 99, 100};

    assert(student[0] == 88); // 첫 번째 μ›μ†Œ 0
    assert(student[3] == 65); // n 번째 μ›μ†Œ (μ°ΎμœΌλ €λŠ” μ›μ†Œ μˆœμ„œ - 1)
    assert(student[5] == 100); // λ§ˆμ§€λ§‰ μ›μ†Œ (λ°°μ—΄ 길이 - 1)
}

 

배열은 0 번째 인덱슀 λΆ€ν„° μ‹œμž‘ν•œλ‹€.

 

이에 λŒ€ν•œ μžμ„Έν•œ 사항은 λ©”λͺ¨λ¦¬μ™€ κ΄€λ ¨λ˜μ–΄ μžˆλŠ”λ°, λ‹€μŒ 포인터 ν¬μŠ€νŒ…μ—μ„œ λ‚˜μ˜€λ―€λ‘œ μž μ‹œ λ„˜μ–΄κ°€λ„λ‘ ν•˜μž.

 

μœ„μ˜ κ·œμΉ™μ„ 보면 λ‹€μŒκ³Ό 같은 νŠΉμ§•μ„ μ•Œ 수 μžˆλ‹€.

 

λ°°μ—΄μ—μ„œ νŠΉμ • μ›μ†Œμ˜ μœ„μΉ˜(n 번째) 의 값을 μ–»κΈ° μœ„ν•΄μ„œλŠ” n-1 번째 μΈλ±μŠ€μ— μ ‘κ·Όν•˜λ©΄ λœλ‹€!