[3주차3일차] Chapter 04_자료구조/알고리즘 자료구조1~2

HA_·2023년 10월 22일
0

자료구조란?

자료구조란?

여러 개의 데이터가 묶여있는 자료형을 컨테이너 자료형이라고 하고, 이러한 컨테이너 자료형의 데이터 구조를 자료구조라고 한다.

다양한 자료구조

자료구조는 각각의 컨테이너 자료형에 따라서 차이가 있으며, 파이썬의 대표적인 컨테이너 자료형으로는 리스트(List), 튜플(Tuple), 딕셔너리(Dic), 셋트(Set)가 있다.

리스트(List)

리스트(List)란?

배열과 같이 여러 개의 데이터를 나열한 자료구조

리스트 선언

'[]'를 이용해서 선언하고, 데이터 구분은 ','를 이용한다.

students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
numbers = [10, 20, 30, 40, 50, 60, 70]
strs = [3.14, '십', 20, 'one', '3.141592']
  • 숫자, 문자(열), 논리형 등 모든 기본 데이터를 같이 저장할 수 있다.
datas = [10, 20, 30, [40, 50, 60]]
  • 리스트에 또 다른 컨테이너 자료형 데이터를 저장할 수도 있다.

실습

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

myFamilyNames = ['홍아빠', '홍엄마', '홍길동', '홍동생']
print(myFamilyNames)
=> ['홍아빠', '홍엄마', '홍길동', '홍동생']

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

todaySchedule = ['10시-업무회의',
                 '12시-친구와 점심약속',
                 '3시-자료정리',
                 '6시-운동',
                 '9시-TV시청']
print(todaySchedule)
=> ['10시-업무회의', '12시-친구와 점심약속', '3시-자료정리', '6시-운동', '9시-TV시청']

리스트 아이템 조회

인덱스

인덱스란, 아이템에 자동으로 부여되는 번호표

아이템 조회

리스트 아이템은 인덱스를 이용해서 조회 가능하다.

 students = ['박찬호', '홍길동', '이용규', '박승철', '김지은']
print(students[0])
print(students[1])
print(students[2])
print(students[3])
print(students[4])

=> 박찬호
홍길동
이용규
박승철
김지은

실습

  • 5명의 학생 이름을 리스트에 저장하고 인덱스가 홀수인 학생과 짝수(0포함)인 학생을 구분해서 인덱스와 학생 이름을 출력해보자.
students = ['김성예', '신경도', '박기준', '최승철', '황동석']
print('-- 인덱스가 짝수인 학생 --')
print('students[0] : {}' .format(students[0]))
print('students[2] : {}' .format(students[2]))
print('students[4] : {}' .format(students[4]))
print('-- 인덱스가 홀수인 학생 --')
print('students[1] : {}' .format(students[1]))
print('students[3] : {}' .format(students[3]))
-- 인덱스가 짝수인 학생 --
students[0] : 김성예
students[2] : 박기준
students[4] : 황동석
-- 인덱스가 홀수인 학생 --
students[1] : 신경도
students[3] : 최승철
  • 위의 출력 방법을 for문으로 변경해보자.
students = ['김성예', '신경도', '박기준', '최승철', '황동석']

for i in range(5):
    if i % 2 == 0:
        print('인덱스가 짝수인 경우: --> student[{}]: {}'. format(i, students[i]))
    else:
        print('인덱스가 홀수인 경우: --> student[{}]: {}'. format(i, students[i]))

리스트 길이

아이템 개수

리스트 길이란, 리스트에 저장된 아이템 개수를 뜻한다.

students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
sLength = len(students)
print('length of students : {}' .format(sLength))
length of students : 5

len()를 이용한 조회

len()과 반복문을 이용하면 리스트의 아이템 조회가 가능하다.

students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
sLength = len(students)

for i in range(len(students)):
    print('i : {}' .format(i))
    print('students[{}] : {}' .format(i, students[i]))

len()함수는 리스트의 개수뿐만 아니라 문자열의 길이도 알 수 있다.

str = 'Hello python!!'
print('\'Hello python!!\'의 길이 : {}' .format(len(str)))
'Hello python!!'의 길이 : 14

리스트와 for문(1)

for문을 이용한 조회

#1
cars = ['그랜저', '소나타', '말리부', '카니발', '쏘렌토']

for i in range(len(cars)):
    print(cars[i])
    
    
#2
cars = ['그랜저', '소나타', '말리부', '카니발', '쏘렌토']

for car in cars:
    print(car)
그랜저
소나타
말리부
카니발
쏘렌토

for문을 이용한 내부 리스트 조회

studentCnts = [[1, 19], [2, 20], [3, 22], [4, 18], [5, 21]]
for classNo, cnt in studentCnts:
    print('{}학습 학생 수 : {}' .format(classNo, cnt))
1학습 학생 수 : 19
2학습 학생 수 : 20
3학습 학생 수 : 22
4학습 학생 수 : 18
5학습 학생 수 : 21

리스트와 for문(2)

for문을 이용한 조회

for문과 if문을 이용해서 과락 과목 출력하기

minScore = 60
scores = [
    ['국어', 58],
    ['영어', 77],
    ['수학', 89],
    ['과학', 99],
    ['국사', 50]]

for item in scores:
    if item[1] < minScore:
        print('과락 과목: {}. 점수: {}' .format(item[0], item[1]))

조건문과 함께 조회

minScore = 60
scores = [
    ['국어', 58],
    ['영어', 77],
    ['수학', 89],
    ['과학', 99],
    ['국사', 50]]

for subject, score in scores:
    if score < minScore:
        print('과락 과목: {}. 점수: {}' .format(subject, score))

#continue 이용
for subject, score in scores:
    if score >= minScore: continue
    print('과락 과목: {}, 점수: {}' .format(subject, score))

실습

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

minScore = 60

korScore = int(input('국어 점수: '))
engScore = int(input('영어 점수: '))
matScore = int(input('수학 점수: '))
sciScore = int(input('과학 점수: '))
hisScore = int(input('국사 점수: '))

scores = [
    ['국어', korScore],
    ['영어', engScore],
    ['수학', matScore],
    ['과학', sciScore],
    ['국사', hisScore]]

for subject, score in scores:
    if score < minScore:
        print('과락 과목: {}. 점수: {}' .format(subject, score))

리스트와 while문(1)

while문을 이용한 조회

whilie문을 이용하면 다양한 방법으로 아이템 조회가 가능하다.

cars = ['그랜저', '소나타', '말리부', '카니발', '쏘렌토']

#1
n = 0
while n < len(cars):
    print(cars[n])
    n += 1

#2
n = 0
flag = True
while flag:
    print(cars[n])
    n += 1

    if n == len(cars):
        flag = False

#3
n = 0
while True:
    print(cars[n])
    n += 1

    if n == len(cars):
        break

실습

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

studentCnts = [[1, 18], [2, 19], [3, 23], [4, 21], [5, 20], [6, 22], [7, 17]]
sum = 0
avg = 0
n = 0
while n < len(studentCnts):
    classNo = studentCnts[n][0]
    cnt = studentCnts[n][1]
    print('{}학급 학생수: {}명' .format(classNo, cnt))

    sum += cnt
    n += 1

print('전체 학생 수: {}명' .format(sum))
print('평균 학생 수: {}명' .format(sum / len(studentCnts)))

리스트와 while문(2)

while문을 이용한 조회

while문과 if문을 이용해서 과락 과목 출력하기

minScore = 60

scores = [
    ['국어', 58],
    ['영어', 77],
    ['수학', 89],
    ['과학', 99],
    ['국사', 50]]

n = 0
while n < len(scores):
    if scores[n][1] < minScore:
        print('과락 과목: {}, 점수: {}' .format(scores[n][0], scores[n][1]))
    n += 1
    
#continue 이용
n = 0
while n < len(scores):

    if scores[n][1] >= minScore:
        n += 1
        continue
    print('과락 과목: {}, 점수: {}' .format(scores[n][0], scores[n][1]))
    n += 1

실습

while문을 이용해서 학급 학생 수가 가장 작은 학급과 가장 많은 학급을 출력해보자.

studentCnts = [[1, 18],
               [2, 19],
               [3, 23],
               [4, 21],
               [5, 20],
               [6, 22],
               [7, 17]]

minclassNo = 0; maxclassNo = 0
minCnt = 0; maxCnt = 0

n = 0
while n < len(studentCnts):

    if minCnt == 0 or minCnt > studentCnts[n][1]:
        minclassNo = studentCnts[n][0]
        minCnt = studentCnts[n][1]

    if maxCnt < studentCnts[n][1]:
        maxclassNo = studentCnts[n][0]
        maxCnt = studentCnts[n][1]

    n += 1

print('학생 수가 가장 적은 학급(학생수): {}학급({}명)' .format(minclassNo, minCnt))
print('학생 수가 가장 많은 학급(학생수): {}학급({}명)' .format(maxclassNo, maxCnt))

enumerate() 함수

enumerate() 함수

enumerate() 함수를 이용하면 아이템을 열거할 수 있다.

sports = ['농구', '수구', '축구', '마라톤', '테니스']

for i in range(len(sports)):
    print('{} : {}' .format(i, sports[i]))

#range(len(sports))를 간편하게 쓰기 위해 enumerate() 함수 사용
for idx, value in enumerate(sports):
    print('{} : {}' .format(idx, value))
0 : 농구
1 : 수구
2 : 축구
3 : 마라톤
4 : 테니스

enumerate()는 문자열에도 적용할 수 있다.

str = 'Hello python.'
for idx, value in enumerate(str):
    print('{} : {}' .format(idx, value))
0 : H
1 : e
2 : l
3 : l
4 : o
5 :  
6 : p
7 : y
8 : t
9 : h
10 : o
11 : n
12 : .

실습

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

sports = ['농구', '수구', '축구', '마라톤', '테니스']
favoritesport = input('가장 좋아하는 스포츠 입력: ')
bestSportIdx = 0

for idx, value in enumerate(sports):
    if value == favoritesport:
        bestSportIdx = idx + 1

print('{}(은)는 {}번째에 있습니다.' .format(favoritesport, bestSportIdx))

0개의 댓글