✅ 3. 자료구조 Data Structure

Jane의 study note.·2022년 10월 1일
0

파이썬 Python

목록 보기
8/31
post-thumbnail

링크:자료구조

자료구조란

자료(Data,음식)와 자료 구조(Data Structure,그릇)

• 자료(데이터)를 어디에 어떻게 관리할지
• 검색, 순회(iterate), 저장, 삭제, 변경 …
• 자료를 담는 추상적인 틀

Data 와 Data Structure
• 컴퓨터의 자원은 한정적
• 제한된 제약조건 내에 정확한 결과를 내야함
• 데이터의 형태와 쓰임에 가장 적합한 자료구조를 쓰는 것은 매우 중요
• 모든 병목의 시작점
• 잘못 쓴 자료구조 하나로 진짜 느린 시스템이 될 수도 …
• 트래픽이 몰린다면...?

• 자료구조의 특징
• 자료구조의 장점
• 자료구조의 한계를 알아야 한다.

알고리즘
• 어떤 문제가 주어졌을 때, 문제를 풀기 위한 동작들의 절차
• 라면 끓이는 법, 집에서 학교를 가는 법, …
• Input 값을 통해 Output 결과를 내는 과정

자료구조를 공부해야 하는 이유

자료구조를 공부하는 이유
• 현업에서
• 알고리즘과 자료구조를 모르면 해결할 수 없는 문제들이 존재한다
• 자료구조의 내부 구현을 모르면 잘못 사용하기 쉽다
• 수억 개의 데이터 중 내가 원하는 결과를 빠르게 찾으려면?
• 한정된 자원(시간, 공간)으로 최적의 결과를 내려면?


자료구조 스터디

#01~38

01_자료구조란
데이터를 묶어서 관리하자!
파이썬의 다양한 자료구조를 이해하자!
자료구조란?  여러 개의 데이터가 묶여있는 자료형을 컨테이너 자료형이라고 하고, 이러한 컨테이너 자료형의 데이터 구조를 자료구조라고 한다.
다양한 자료구조: 리스트 튜플, 딕셔너리, 세트

1.리스트

02_리스트(List)
데이터를 줄 세우자!
리스트란?  배열과 같이 여러 개의 데이터를 나열한 자료구조.
리스트 선언:  ‘[ ]’를 이용해서 선언하고, 데이터 구분은 ‘,’를 이용한다.
• 숫자, 문자(열), 논리형 등 모든 기본 데이터를 같이 저장할 수 있다.
• 리스트에 또 다른 컨테이너 자료형 데이터를 저장할 수도 있다.

 가족 이름을 리스트에 저장하고 출력해보자.

 오늘 일정을 리스트에 저장하고 출력해보자.

03_리스트 아이템 조회
리스트의 아이템을 조회하자!
인덱스:  인덱스란, 아이템에 자동으로 부여되는 번호표
아이템 조회:  리스트 아이템은 인덱스를 이용해서 조회 가능하다.

 5명의 학생 이름을 리스트에 저장하고 인덱스가 홀수인 학생과 짝수(0포함)인 학생을 구분해서 인덱스와 학생 이름을 출력해보자.

 위의 출력 방법을 for문으로 변경해보자.

04_리스트 길이
리스트의 아이템 개수를 확인하자!
아이템 개수 :  리스트 길이란, 리스트에 저장된 아이템 개수를 뜻한다.
len()를 이용한 조회:  len()과 반복문을 이용하면 리스트의 아이템 조회가 가능하다.
문자열 길이 조회:  len() 함수는 리스트의 개수뿐만 아니라 문자열의 길이도 알 수 있다.

 좋아하는 운동 종목을 리스트에 저장하고 반복문을 이용해서 출력해 보자.

05_리스트와 for문 (01)
for문을 이용해서 리스트 아이템을 참조하자!
for문을 이용한 조회 :  for문을 이용하면 리스트의 아이템을 자동으로 참조할 수 있다.
내부 리스트 조회: for문을 이용하면, 리스트 내부에 또 다른 리스트의 아이템을 조회할 수도 있다.

 아래 표와 리스트를 이용해서 학급별 학생 수와 전체 학생 수 그리고 평균 학생수를 출력해보자.

06_리스트와 for문 (02)
마지막 실습
for문의 다양한 기능을 리스트와 사용하자!
for문을 이용한 조회
조건문과 함께 사용

 for문과 if문을 이용해서 과락 과목 출력하기
 사용자가 국어, 영어, 수학, 과학, 국사 점수를 입력하면 과락 과목과 점수를 출력하는 프로그램을 만들어보자.
 아래의 표와 리스트를 이용해서 학급 학생 수가 가장 작은 학급과 가장 많은 학급을 출력해보자.

07_리스트와 while문 (01)
while문을 이용한 리스트 아이템 참조!
while문을 이용한 조회
 while문을 이용하면 다양한 방법으로 아이템 조회가 가능하다.

 아래 표와 리스트를 이용해서 학급별 학생 수와 전체 학생 수 그리고 평균 학생수를 출력해보자.

08_리스트와 while문 (02)
마지막 실습
while문을 이용한 리스트 아이템 참조!
while문을 이용한 조회
조건문과 함께 사용

 while문과 if문을 이용해서 과락 과목 출력하기
 while문을 이용해서 사용자가 국어, 영어, 수학, 과학, 국사 점수를 입력하면 과락 과목와 점수를 출력하는 프로그램을 만들어보자.
 while문을 이용해서 학급 학생 수가 가장 작은 학급과 가장 많은 학급을 출력해보자.

09_enumerate()함수
인덱스와 아이템을 한번에 조회하자!
인덱스와 아이템 조회
enumerate() 함수:  enumerate() 함수를 이용하면 아이템을 열거할 수 있다.
 enumerate()는 문자열에도 적용할 수 있다.

 가장 좋아하는 스포츠가 몇 번째에 있는지 출력하는 프로그램을 만들어보자.

10_리스트에 아이템 추가
리스트에 아이템을 추가하자!
아이템 추가 하기
 append() 함수를 이용하면 마지막 인덱스에 아이템을 추가할 수 있다.

 가족 구성원의 나이가 아래와 같을 때 새로 태어난 동생을 리스트에 추가해보자.

11_리스트의 특정 위치에 아이템 추가
특정 위치에 아이템을 추가하자!
추가 아이템 위치 지정
 insert() 함수를 이용하면 특정 위치(인덱스)에 아이템을 추가할 수 있다.

 오름차순으로 정렬되어 있는 숫자들에 사용자가 입력한 정수를 추가하는 프로그램을 만들어보자.(단, 추가 후에도 오름차순 정렬이 유지되어야 한다.)

12_리스트의 아이템 삭제
마지막 실습
리스트의 아이템을 삭제하자!
마지막 아이템 삭제:  pop() 함수를 이용하면 마지막 인덱스에 해당하는 아이템을 삭제할 수 있다.
특정 위치 아이템 삭제:  pop(n) 함수를 n인덱스에 해당하는 아이템을 삭제할 수 있다.

 다음은 어떤 체조 선수의 점수표이다. 점수표에서 최고 및 최저 점수를 삭제해보자.

13_리스트의 특정 아이템 삭제
리스트의 특정 아이템을 삭제하자!
 remove() 함수를 이용하면 특정 아이템을 삭제할 수 있다.
 remove()는 한 개의 아이템만 삭제 가능하다. 만약 삭제하려는 데이터가 2개 이상이라면 while문을 이용하자.

 아래의 오늘 일정표에서 사용자가 입력한 일정을 삭제하는 프로그램을 만들어보자.

 아래 시험 과목표에서 사용자가 입력한 과목을 삭제하는 프로그램을 만들어보자.

14_리스트 연결
리스트 연결(확장): 리스트에 또 다른 리스트를 연결하자!
 extend() 함수를 이용하면 리스트에 또 다른 리스트를 연결(확장)할 수 있다.
 덧셈 연산자를 이용해서 리스트를 연결할 수도 있다.

 나와 친구가 좋아는 번호를 합치되 번호가 중복되지 않게 하는 프로그램을 만들자.

15_리스트 아이템 정렬
오름차순 또는 내림차순으로 정렬하자!
아이템 정렬:  sort() 함수를 이용하면 아이템을 정렬할 수 있다.
 아래 점수표에서 최저 및 최고 점수를 삭제한 후 총점과 평균을 출력해 보자.

16_리스트 아이템 순서 뒤집기
아이템 순서를 뒤집자!
• 리스트 순서 뒤집기:  reverse() 함수를 이용하면 아이템을 순서를 뒤집을 수 있다.

 다음은 전쟁에서 사용되는 암호이다. 암호를 해독하는 프로그램을 만들어보자.

17_리스트 슬라이싱
원하는 아이템만 뽑아내자!
리스트 슬라이싱 :  [n:m]을 이용하면 리스트에서 원하는 아이템만 뽑아낼 수 있다.
문자열 슬라이싱 "  [n:m]을 이용하면 문자열도 슬라이싱이 가능하다.
슬라이싱 단계 설정:  슬라이싱할 때 단계를 설정할 수 있다.
아이템 변경:  슬라이싱을 이용해서 아이템을 변경할 수 있다.
slice() :  slice()함수를 이용해서 아이템을 슬라이싱할 수 있다.

18_리스트 나머지 기능들 (01)
리스트도 곱셈 연산이 가능하다! 특정 아이템의 인덱스를 찾자!
리스트 곱셈 연산 :  리스트를 곱셈 연산하면 아이템이 반복된다.
아이템 위치 찾기 :  index(item) 함수를 item의 인덱스를 알아낼 수 있다.

 1부터 10까지의 정수가 중복되지 않고 섞여 있을 때 행운의 숫자 7의 위치를 찾자!

19_리스트 나머지 기능들 (02)
특정 아이템의 개수를 알아내자! 필요 없는 아이템은 삭제하자!
특정 아이템의 개수는? :  count() 함수를 이용하면 특정 아이템의 개수를 알아낼 수 있다.
아이템 삭제 :  del 키워드를 이용하면 특정 아이템을 삭제할 수 있다.

 하루 동안 헌혈을 진행한 후 혈액형 별 개수를 파악하는 프로그램을 만들어보자.

2.튜플

20_튜플(Tuple)
리스트와 비슷하지만 아이템 변경 불가!
튜플이란?  리스트(List)와 비슷하지만 아이템 변경이 불가하다.
튜플 선언  ‘()’를 이용해서 선언하고, 데이터 구분은 ‘,’를 이용한다.
• 숫자, 문자(열), 논리형 등 모든 기본 데이터를 같이 저장할 수 있다.
• 튜플에 또 다른 컨테이너 자료형 데이터를 저장할 수도 있다.

 가족 이름을 튜플에 저장하고 출력해보자.

 오늘 일정을 튜플에 저장하고 출력해보자.

21_튜플 아이템 조회
튜플의 아이템을 조회하자!
인덱스:  튜플도 리스트와 마찬가지로 아이템에 자동으로 부여되는 번호표가 있다.
아이템 조회:  튜플 아이템은 인덱스를 이용해서 조회 가능하다.
잘못된 인덱스 사용으로 인한 에러 발생!

 5명의 학생 이름을 튜플에 저장하고 인덱스가 홀수인 학생과 짝수(0포함)인 학생을 구분해서 인덱스와 학생 이름을 출력해보자.

 위의 출력 방법을 for문으로 변경해보자.

22_in과 not in 키워드
아이템 존재 유/무 판단하기!
 in, not in 키워드를 이용하면 아이템의 존재 유/무를 알 수 있다.
 in, not in 키워드는 문자열에서도 사용 가능하다.

 컴퓨터가 1부터 10까지 5개의 난수를 생성한 후, 사용자가 입력한 숫자가 있는지 또는 없는지를 출력하는 프로그램을 만들어보자.

 문장에서 비속어가 있는지 알아내는 프로그램을 만들어보자.

23_튜플 길이
튜플의 아이템 개수를 확인하자!
아이템 개수:  리스트와 마찬가지로, 튜플에 저장된 아이템 개수를 튜플 길이라고 한다.
len()를 이용한 조회:  len()과 반복문을 이용하면 튜플의 아이템 조회가 가능하다.

 좋아하는 운동 종목을 튜플에 저장하고 반복문을 이용해서 출력해 보자.

24_튜플 결합
두 개의 튜플을 합쳐서 새로운 튜플을 만들자!
튜플 결합:  두 개의 튜플을 결합할 수 있다.
리스트 vs 튜플:  리스트에서 사용할 수 있는 extend()함수를 튜플에서는 사용할 수 없다.

 튜플을 이용해서 나와 친구가 좋아는 번호를 합치되 번호가 중복되지 않게 하는 프로그램을 만들자.

25_튜플 슬라이싱
원하는 아이템만 뽑아내자!
튜플 슬라이싱:  리스트와 마찬가지로 [n:m]을 이용하면 리스트에서 원하는 아이템만 뽑아낼 수 있다.
슬라이싱 단계 설정:  슬라이싱할 때 단계를 설정할 수 있다.
슬라이싱을 이용한 아이템 변경:  튜플은 슬라이싱을 이용해서 아이템을 변경할 수 없다.
 리스트에 튜플 아이템으로 변경 가능
slice():  slice()함수를 이용해서 아이템을 슬라이싱할 수 있다.

26_리스트와 튜플
비슷하지만 다른 리스트와 튜플!
리스트와 튜플 차이점:  튜플은 리스트와 달리 아이템 추가, 변경, 삭제가 불가하다.
 튜플은 선언 시 괄호 생략이 가능하다.
리스트와 튜플 변환  리스트와 튜플은 자료형 변환이 가능하다.

 튜플을 이용한 점수표에서 최저 및 최고 점수를 삭제한 후 총점과 평균을 출력해 보자.

27_튜플 아이템 정렬
튜플도 리스트처럼 정렬할 수 있을까?
튜플 정렬 :  튜플은 수정이 불가하기 때문에 리스트로 변환 후 정렬하자.
sorted() : sort() 함수를 이용하면 아이템을 정렬할 수 있다.
★ sorted()는 리스트 자료형을 반환한다.

 튜플로 정의된 점수표에서 최저 및 최고 점수를 삭제한 후 총점과 평균을 출력해 보자.

28_튜플과 for문 (01)
for문을 이용해서 튜플 아이템을 참조하자!
for문을 이용한 조회 :  for문을 이용하면 튜플의 아이템을 자동으로 참조할 수 있다.
내부 튜플 조회 : for문을 이용하면, 튜플 내부에 또 다른 튜플의 아이템을 조회할 수도 있다.

 아래 표와 튜플을 이용해서 학급별 학생 수와 전체 학생 수 그리고 평균 학생수를 출력해보자.

29_튜플과 for문 (02)
마지막 실습
for문의 다양한 기능을 튜플과 사용하자!
for문을 이용한 조회 :  for문과 if문을 이용해서 과락 과목 출력하기
조건문과 함께 사용

 사용자가 국어, 영어, 수학, 과학, 국사 점수를 입력하면 과락 과목과 점수를 출력하는 프로그램을 만들어보자.

 아래의 표와 튜플을 이용해서 학급 학생 수가 가장 작은 학급과 가장 많은 학급을 출력해보자.

30_튜플과 while문 (01)
while문을 이용한 튜플 아이템 참조!
• while문을 이용한 조회:  while문을 이용하면 다양한 방법으로 아이템 조회가 가능하다.

 아래 표와 튜플을 이용해서 학급별 학생 수와 전체 학생 수 그리고 평균 학생수를 출력해보자.

 학급별 학생 수가 다음과 같이 정의되어 있을 때, while 문을 이용해서 학급 학생 수가 가장 작은 학급과 가장 많은 학급을 출력해보자.

31_튜플과 while문 (02)
마지막 실습
while문을 이용한 튜플 아이템 참조!
while문을 이용한 조회 :  while문과 if문을 이용해서 과락 과목 출력하기
조건문과 함께 사용

 while문을 이용해서 사용자가 국어, 영어, 수학, 과학, 국사 점수를 입력하면 과락 과목와 점수를 출력하는 프로그램을 만들어보자.

3.딕셔너리

32_딕셔너리
키(key)를 이용해서 자료구조를 다루자!
딕셔너리란?  키(key)와 값(value)를 이용해서 자료를 관리한다.
딕셔너리 선언  ‘{ }’를 이용해서 선언하고, ’키:값’의 형태로 아이템을 정의한다.
• key와 value에는 숫자, 문자(열), 논리형 뿐만 아니라 컨테이너 자료형도 올수 있다.
• 단, key에 immutable 값은 올수 있지만 mutable 값은 올수 없다.

 나의 정보(이름, 전공, 메일, 주소 등)를 딕셔너리에 저장하고 출력해보자.

33_딕셔너리 조회
키(key)를 이용해서 값(value)을 조회하자!
딕셔너리 조회:  딕셔너리는 키(key)를 이용해서 값(value)을 조회한다.
 존재하지 않는 키를 이용한 조회 시 에러(error) 발생한다.
get()를 이용한 조회 :  get(key)를 이용해서 값(value)을 조회 할 수 있다.

 나의 정보(이름, 전공, 메일, 주소 등)를 딕셔너리에 저장하고 ‘[ ]’와 ‘get()’함수를 이용해서 조회하고 출력하자.

34_딕셔너리 추가
키(key)를 이용해서 아이템을 추가하자!
딕셔너리 추가 :  ‘딕셔너리이름[키(key)] = 값(value)’ 형태로 아이템을 추가한다.
 추가 하려는 키가 이미 있다면 기존 값이 변경된다.

 학생 정보(이름, 학년, 메일, 주소)를 입력받아 딕셔너리에 추가해보자.

 0부터 10까지의 각각의 정수에 대한 팩토리얼을 딕셔너리에 추가해 보자.

35_딕셔너리 수정
키(key)를 이용해서 벨류(value)를 수정하자!
• 딕셔너리 수정 :  ‘딕셔너리이름[키(key)] = 값(value)’ 형태로 아이템을 수정한다.

 학생의 시험 점수가 60점 미만이면 ‘F(재시험)’으로 값을 변경해보자.

 하루에 몸무게(kg)와 신장(m)이 각각 -0.3kg, +0.001m씩 변한 다고 할 때, 30일 후의 몸무게와 신장의 값을 저장하고 BMI 값도 출력하는 프로그램을 만들어보자. (현재 신체정보는 아래의 딕셔너리에 저장되어 있다.)

36_keys()와 values()
전체 키(key)와 벨류(value)를 조회하자!
• keys()와 values()
 전체 키(key)와 값(value)를 조회할 수 있다.
 리스트(list())로 변환 하기
 for문을 이용한 조회
 학생의 시험 점수가 60점 미만이면 ‘F(재시험)’으로 값을 변경하는 코드를 keys()를 이용해서 작성해보자.

37_딕셔너리 삭제
del과 pop()를 이용해서 item을 삭제하자!
del :  del과 key를 이용한 item 삭제
pop():  pop()와 key를 이용한 item 삭제
 딕셔너리에 저장된 점수 중 최저 및 최고 점수를 삭제하는 프로그램을 만들어보자.

38_딕셔너리 유용한 기능
in, len(), clear()를 알아두자!
in, not in :  키(key) 존재 유/무 판단 한다.
len():  딕셔너리 길이(아이템 개수) 를 알 수 있다.
clear():  모든 아이템을 삭제 한다.

 개인 정보에 ‘연락처’와 ‘주민등록번호’가 있다면 삭제하는 코드를 작성해보자.

0개의 댓글