본문 바로가기
Algorithm/자료구조 이론

Chapter 03. 배열

by mean. 2020. 7. 14.
728x90
반응형

꼭 알아둬야 할 자료 구조: 배열 (Array)

  • 데이터를 나열하고, 각 데이터를 인덱스에 대응하도록 구성한 데이터 구조
    * 인덱스(index): String처럼 연관된 데이터에 대해서 직접적으로 접근이 가능하도록, 번호를 할당.
    이를 이용해서 연결된 배열의 개별 요소에 직접적으로 접근을 가능하도록 한다.
  • 파이썬에서는 리스트 타입이 배열 기능을 제공함

example: index[2] = R

1. 배열은 왜 필요할까?

  • 같은 종류의 데이터를 효율적으로 관리하기 위해 사용
  • 같은 종류의 데이터를 순차적으로 저장
  • 장점:
    • 빠른 접근 가능 (Index를 활용.)
      • 첫 데이터의 위치에서 상대적인 위치로 데이터 접근(인덱스 번호로 접근)
        * 연관된 배열의 시작 주소를 알아야 한다.
  • 단점: 
    • 데이터 추가/삭제의 어려움
      • 미리 배열의 최대 길이를 지정해야 함.
        * 기존의 존재하는 배열의 추가하기 위해서는 배열을 추가로 만들어 붙여야 하기 때문.
        * 최악의 경우, 배열을 따로 만들어야 하는 경우가 발생할 수 있다.
      • 데이터가 가변적인 경우, 배열의 중간에 해당하는 정보를 삭제하여 중간에 빈 배열 공간이 존재하여, 뒤에 존재하는 데이터를 붙여야 하는 경우가 발생할 수 있다.

엑셀로 이해해보기

2. 파이썬과 C언어의 배열 예제

C 언어 예: 영어 단어 저장

#include <stdio.h>

int main(int argc, char * argv[])
{
    char country[3] = "US";
    printf ("%c%c\n", country[0], country[1]);
    printf ("%s\n", country);    
    return 0;
}

파이썬 언어 예: 영어 단어 저장

country = 'US'
print(country)

country = country + 'A'
print(country)

Output:
US
USA

3. 파이썬과 배열

  • 파이썬에서는 리스트를 활용하여 배열 구현 가능
# 1차원 배열: 리스트로 구현시
data_list = [1, 2, 3, 4, 5]
data_list

Output: [1,2,3,4,5]

# 2차원 배열: 리스트로 구현시
data_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
data_list

Output: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

print (data_list[0])

print (data_list[0][0])
print (data_list[0][1])
print (data_list[0][2])
print (data_list[1][0])
print (data_list[1][1])

Output:
[1, 2, 3]
1
2
3
4
5

4. 프로그래밍 연습

연습1: 위의 2차원 배열에서 9, 8, 7 을 순서대로 출력해보기

print(list(reversed(data_list[2])))

Output: [9, 8, 7]

연습2: 위의 dataset 리스트에서 전체 이름 안에 M 은 몇 번 나왔는지 빈도수 출력하기

dataset = ['Braund, Mr. Owen Harris',
'Cumings, Mrs. John Bradley (Florence Briggs Thayer)',
'Heikkinen, Miss. Laina',
'Futrelle, Mrs. Jacques Heath (Lily May Peel)',
'Allen, Mr. William Henry',
'Moran, Mr. James',
'McCarthy, Mr. Timothy J',
'Palsson, Master. Gosta Leonard',
'Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)',
'Nasser, Mrs. Nicholas (Adele Achem)',
'Sandstrom, Miss. Marguerite Rut',
'Bonnell, Miss. Elizabeth',
'Saundercock, Mr. William Henry',
'Andersson, Mr. Anders Johan',
'Vestrom, Miss. Hulda Amanda Adolfina',
'Hewlett, Mrs. (Mary D Kingcome) ',
'Rice, Master. Eugene',
'Williams, Mr. Charles Eugene',
'Vander Planke, Mrs. Julius (Emelia Maria Vandemoortele)',
'Masselmani, Mrs. Fatima',
'Fynney, Mr. Joseph J',
'Beesley, Mr. Lawrence',
'McGowan, Miss. Anna "Annie"',
'Sloper, Mr. William Thompson',
'Palsson, Miss. Torborg Danira',
'Asplund, Mrs. Carl Oscar (Selma Augusta Emilia Johansson)',
'Emir, Mr. Farred Chehab',
'Fortune, Mr. Charles Alexander',
'Dwyer, Miss. Ellen "Nellie"',
'Todoroff, Mr. Lalio']

 

m_count = 0
for data in dataset:
    for index in range(len(data)):
        if data[index] == 'M':
            m_count += 1
print (m_count)

Output: 38

참고

  • range(stop): range(10)은 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  • range(start, stop): range(1, 11)은 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
  • range(start, stop, step): range(0, 20, 2)은 0, 2, 4, 6, 8, 10, 12, 14, 16, 18
    • start, stop, step은 음수로 지정 가능
728x90
반응형