1 of 40

프로그래밍

  • 자료형의 종류와 특성을 알고, 적합한 자료형을 선택하여 프로그램을 작성한다.
  • 표준 입출력과 파일 입출력을 활용한 프로그램을 작성한다.
  • 다차원 데이터 구조를 활용한 프로그램을 작성한다.
  • 다양한 제어 구조를 복합적으로 활용한 프로그램을 작성한다.
  • 객체를 구현하는 클래스와 인스턴스를 활용하여 프로그램을 작성한다.

1

2 of 40

리스트와 다차원 리스트

리스트

① 리스트의 개념

      • 여러 개의 데이터를 순서대로 저장할 수 있는 자료형
      • 파이썬에서는 다양한 종류의 자료형 데이터를 저장할 수 있음

2

• 리스트를 활용하여 프로그래

밍할 수 있다.

• 다차원 리스트를 활용하여

프로그래밍할 수 있다.

3 of 40

      • 리스트 자료형 사용 시 하나의 변수를 간단하게 많은 색을 저장하고 효율적으로 처리할 수 있음

3

04. 리스트와 다차원 리스트

4 of 40

② 리스트의 구조

      • 데이터를 대괄호 안에 콤마로 구분하여 저장

4

04. 리스트와 다차원 리스트

5 of 40

5

color[1]

color[4]

color[6]

6 of 40

③ 리스트의 활용

      • 인덱스를 통해 접근하여 데이터 추가, 수정, 삭제 가능

6

04. 리스트와 다차원 리스트

7 of 40

7

04. 리스트와 다차원 리스트

8 of 40

8

score = [100, 22, 13, 12, 43, 87, 97, 23, 91, 29]

# 1. 맨 마지막 학생 점수 29점을 92점으로 수정하기

score[9] = 92

score.sort( )

score.reverse( )

print( score )

9 of 40

다차원 리스트

      • 리스트 안에 다른 리스트를 중첩하여 저장 가능
      • 저장된 리스트의 중첩된 깊이에 따라 N차원 리스트로 표현

9

04. 리스트와 다차원 리스트

10 of 40

2차원 리스트를 이용한 프로그램 작성하기

  • 학생의 이름과 성적을 data 리스트에 저장하여 출력하는 프로그램을 작성해 보자.

출력 결과에 맞게 소스 코드를 완성해 보자.

10

data[2][0], data[2][1]

data[6][0], data[6][1]

11 of 40

data 리스트에 새로운 학생의 이름과 성적이 나오도록 소스 코드를 완성해 보자.

11

input("학생의 이름: ")

int(input("학생의 점수: "))

[name, score]

data

12 of 40

2차원 리스트 활용하기

  • 20XX 월드컵 A조의 경기 결과를 보고 제시된 프로그램을 작성해 보자.

위 경기 결과를 리스트에 저장하고 승점을 계산하는 프로그램을 완성해 보자.

12

(stage[0][1]*3)+(stage[0][2]*1)

(stage[1][1]*3)+(stage[1][2]*1)

(stage[2][1]*3)+(stage[2][2]*1)

(stage[3][1]*3)+(stage[3][2]*1)

13 of 40

next_stage 변수에 16강에 진출할 수 있는 상위 2개국의 결과를 저장하고 출력해 보자.

next_stage에 저장된 데이터 중 국가 이름만 출력하는 프로그램을 작성해 보자.

13

stage[0]

stage[1]

print( '16강 진출 국가는', next_stage[0][0], ', ',

next_stage[1][0], "입니다." )

14 of 40

제어 구조

선택 구조

① if 문의 이해

      • 조건에 따라 다른 명령을 선택하여 실행
      • if 문 사용 시 유의 사항
        • 조건식은 비교 연산자 사용
        • 콜론(:)으로 끝남
        • 조건문에 포함되는 명령어들은 들여쓰기를 해야 됨

14

다양한 제어 구조를 복합적으

로 활용하여 프로그래밍할 수

있다.

조건식 조건문에서 사용하는 조건식은 변수와 상수, 그리고 연산자를 사용하여 만들 수 있으며, 그 중 연산자는 산술, 비교, 논리 연산자를 활용할 수 있다. 조건식은 조건문을 작성하는데 기본이 되는 단계로, 조건식을 논리적으로 세워야 문제를 명확하게 해결할 수 있다.

15 of 40

② if 문의 활용

      • 단독 if 문

      • if ~ else 문

15

05. 제어 구조

16 of 40

      • if ~ elif ~ else 문

16

05. 제어 구조

17 of 40

17

stu1[1] > stu2[1]

stu1[0]

stu2[0]

18 of 40

if 문을 이용한 문제 해결하기

  • if 문을 사용하여 제시된 문제를 해결할 수 있는 프로그램을 작성해 보자.

현재의 문제 상황을 분석해 보자.

18

46

100

19 of 40

다음은 문제를 해결하기 위한 알고리즘과 소스 코드이다. 알고리즘을 토대로 소스 코드를 완성해 보자.

19

minute > 50

minute*2

20 of 40

if ~ elif ~ else 문을 이용한 프로그램 작성하기

  • 제시된 기준에 따라 과일의 당도를 측정하여 등급을 분류하는 프로그램을 작성해 보자.

20

21 of 40

알고리즘을 보고 순서도의 조건식에 들어갈 내용을 적어 보자.

21

fruit >= 11

fruit >= 9

22 of 40

입력한 당도에 따른 등급이 출력되도록 프로그램을 완성해 보자.

22

if fruit >= 11:

print("특등 등급입니다.")

elif fruit >= 9:

print("상 등급입니다.")

else:

print("보통 등급입니다.")

23 of 40

반복 구조

① for 문

      • 지정된 횟수만큼 명령어를 반복 실행
      • range(N) 함수: 0부터 (N-1)까지의 정수가 하나씩 변수에 대입됨

23

05. 제어 구조

24 of 40

24

05. 제어 구조

25 of 40

② while 문

      • 조건식이 참인 동안 명령어를 반복 실행

25

05. 제어 구조

26 of 40

      • while 문은 for 문과 달리 조건식을 사용하여 반복하는 횟수를 결정함

26

05. 제어 구조

무한 루프

반복 처리 조건이 충족되지 않아 작업이 무한히 반복되는 구조로, 프로그램을 강제로 종료하지 않으면 무한히 실행된다.

(예) while True: → 반복문이 무한히 실행

27 of 40

반복 구조를 이용한 프로그램 작성하기

  • A학급 학생들이 지각한 횟수를 기록한 출결표 데이터를 활용하여 담임 선생님의 요구 사항을 만족시키는 프로그램을 작성해 보자.

담임 선생님의 2가지 요구 사항이 무엇인지 작성해 보자.

27

지각을 5번 초과로 한 학생 명단

가장 지각을 하지 않은 학생 이름

28 of 40

for 문을 사용하여 담임 선생님의 첫 번째 요구 사항을 만족시키는 프로그램을 완성해 보자.

28

if late[idx] > 5:

stu.append( name[idx] )

29 of 40

while 문을 사용하여 담임 선생님의 두 번째 요구 사항을 만족시키는 프로그램을 완성해 보자.

29

if late[idx] < late[minStu]:

minStu = idx

idx = idx + 1

30 of 40

난수와 반복문을 이용한 프로그램 작성하기

  • random 모듈을 참고하여 다음 문제를 풀어 보자.

random( ) 함수를 사용하여 무작위 숫자 1개를 출력하는 프로그램을 완성해 보자.

randint(a, b) 함수는 a~b 사이의 임의의 정수를 생성하는 함수이다. 반복문과 randint( ) 함수를 사용해 0 ~ 100 사이의 무작위 정수 10개를 생성하고 출력하는 프로그램을 완성해 보자.

30

random

random( )

import random

randint(0, 100)

31 of 40

random 모듈을 사용하여 1,000명의 학생 키를 기록하는 파일(height.txt)을 만들고, 평균 키를 계산하는 프로그램을 완성해 보자.

31

(str(random.randint(100, 200)))

for i in range(1000):

sum += int(file.readline())

print( sum/1000 )

32 of 40

중첩 제어 구조

① 중첩 선택 구조

      • 여러 개의 if 문을 중첩하여 사용하는 구조

32

05. 제어 구조

33 of 40

중첩 선택 구조를 이용한 프로그램 작성하기

  • 3명의 학생 이름 중 사전순으로 가장 마지막 학생의 이름을 출력하는 알고리즘을 순서도로 표현하고, 소스 코드를 완성해 보자.

33

name[0] > name[1]:

name[0] > name[2]:

name[1] > name[2]:

34 of 40

② 중첩 반복 구조

      • 여러 개의 반복문을 중첩하여 사용하는 구조

34

05. 제어 구조

35 of 40

중첩 반복 구조를 이용한 프로그램 작성하기

  • 규칙 1~3을 만족하는 up/down 게임을 만들기 위한 알고리즘을 순서도로 표현해 보자.

35

36 of 40

중첩 제어 구조를 이용하여 정렬 및 탐색하기

  • 주어진 학생들의 성격 유형(MBTI) 데이터를 정렬하고 탐색하는 프로그램을 작성해 보자.

학생 데이터를 2차원 리스트 형태로 저장해 보자.

36

['호두', "ENFP"], ['로이', "ISFJ"],

['누룽', "ISTJ"], ['로사', "ESFP"],

['초코', "INFJ"], ['루루', "INTP"],

['코코', "ISFJ"], ['바방', "ISFP"]

37 of 40

저장한 데이터를 성격 유형 기준 오름차순(가나다순)으로 정렬해 보자.

      • 사용한 정렬 알고리즘:

37

버블 정렬

if data[j-1][1] > data[j][1]:

data[j-1], data[j] = data[j], data[j-1]

38 of 40

저장한 데이터를 이름 기준으로 내림차순 정렬해 보자.

      • 사용한 정렬 알고리즘:

38

선택 정렬

vi = i

if data[j][0] > data[vi][0]:

vi = j

data[i], data[vi] = data[vi], data[i]

39 of 40

정렬된 데이터에서 ‘루루’ 학생의 성격 유형을 출력해 보자

4에서 사용한 탐색 알고리즘은 무엇인지 적고, 다른 탐색 알고리즘을 사용하려면 어떻게 바꿀 수 있을지 생각해 보자.

      • 사용한 탐색 알고리즘:

39

if data[i][0] == "루루":

ans = data[i][1]

순차 탐색

순차 탐색이 아닌 이분 탐색을 활용하면 탐색의 범위를 절반씩 나누기에 효율적으로 탐색할 수 있다.

40 of 40

이름 순으로 내림차순 정렬된 데이터에서 ‘루루’ 학생의 성격 유형을 출력해 보자.

      • 사용한 탐색 알고리즘:

40

이분 탐색

mid = (s + e) // 2

break

s = mid+1

e = mid -1