자료(Data,음식)와 자료 구조(Data Structure,그릇)
• 자료(데이터)를 어디에 어떻게 관리할지
• 검색, 순회(iterate), 저장, 삭제, 변경 …
• 자료를 담는 추상적인 틀
Data 와 Data Structure
• 컴퓨터의 자원은 한정적
• 제한된 제약조건 내에 정확한 결과를 내야함
• 데이터의 형태와 쓰임에 가장 적합한 자료구조를 쓰는 것은 매우 중요
• 모든 병목의 시작점
• 잘못 쓴 자료구조 하나로 진짜 느린 시스템이 될 수도 …
• 트래픽이 몰린다면...?
• 자료구조의 특징
• 자료구조의 장점
• 자료구조의 한계를 알아야 한다.
알고리즘
• 어떤 문제가 주어졌을 때, 문제를 풀기 위한 동작들의 절차
• 라면 끓이는 법, 집에서 학교를 가는 법, …
• Input 값을 통해 Output 결과를 내는 과정
자료구조를 공부하는 이유
• 현업에서
• 알고리즘과 자료구조를 모르면 해결할 수 없는 문제들이 존재한다
• 자료구조의 내부 구현을 모르면 잘못 사용하기 쉽다
• 수억 개의 데이터 중 내가 원하는 결과를 빠르게 찾으려면?
• 한정된 자원(시간, 공간)으로 최적의 결과를 내려면?
#01~38
01_자료구조란
데이터를 묶어서 관리하자!
파이썬의 다양한 자료구조를 이해하자!
자료구조란? 여러 개의 데이터가 묶여있는 자료형을 컨테이너 자료형이라고 하고, 이러한 컨테이너 자료형의 데이터 구조를 자료구조라고 한다.
다양한 자료구조: 리스트 튜플, 딕셔너리, 세트
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 키워드를 이용하면 특정 아이템을 삭제할 수 있다.
하루 동안 헌혈을 진행한 후 혈액형 별 개수를 파악하는 프로그램을 만들어보자.
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문을 이용해서 사용자가 국어, 영어, 수학, 과학, 국사 점수를 입력하면 과락 과목와 점수를 출력하는 프로그램을 만들어보자.
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(): 모든 아이템을 삭제 한다.
개인 정보에 ‘연락처’와 ‘주민등록번호’가 있다면 삭제하는 코드를 작성해보자.