Professional Documents
Culture Documents
입력, 출력
- 파이썬 소개 및 설치 input, output 사용
- 변수에 값 저장 * input으로 받은 값은 문자로 바로 연산에 사용불가.
- 입력 ex)
- 출력
- 조건부 수행 print("Type any number")
a = input()
print(a)
< 파이썬을 배우는 이유 >
- 컴퓨터를 동작시키는 언어를 배움으로써 CT를 익힘.
→ 절차적으로 진행하는 작업을 이해
- 컴퓨터가 할 수 있는 일과 할 수 없는 일을 알게 됨.
Type any number
→ 컴퓨터의 능력과 한계를 이해 6
6
- 작은 프로그램을 완성할 수 있는 능력을 키움.
→ 작아도 기본기능은 갖춰야함
* input으로 받은 값은 연산에 사용하려면
→ 대규모의 프로그램도 작은 프로그램들의 결합
int(정수)나 float(실수)같은 처리를 해줘야함.
- 다른 프로그래밍 언어를 배울 수 있는 토대를 가짐.
+문자열의 연결
→ 프로그래밍 언어들은 서로 유사한 부분을 공유함
‘+’연산은 문자열에 대해서는 연결을 수행.
- 작성된 프로그램 코드를 읽을 수 있는 능력을 키움.
→ 소프트웨어의 동작원리를 파악하어 개선할 점을 제시 가능 a = input("Type string1:")
b = input("Type string2:")
1. 변수에 값 저장 print(a+b)
- 변수 ; 일종의 박스 print(a+"world")
변수명 = 저장할 값 or 변수명
ex) a = 53 // a라는 변수에 53이라는 값 저장
word = "school" // word라는 변수에 school이라는
문자열 저장 Type string1:Type string2:
cost = 100 // 100이라는 값을 저장 Type string1:world
total = sum + diff // total은 sum과 diff의 합
[연습문제]
ex) 프로그램 내부에서 변수에 값 저장 직사각형 두 변의 길이를 받는다.
a = 1 변의 합, 면적을 계산 후 출력한다.
b = 2.3
c = "school" [연습문제]
1 세 개의 문자열을 입력으로 받음
d = 'day'
2.3 문자열 순서를 다양하게 조합하여 출력
e = [1, "bus", 5.9]
school ---------------------------------------------
f = a
day 3. 조건부 수행
print(a)
[1, "bus", 5.9] if / elif / else
print(b) * 들여쓰기 맞추기
1
print(c) * 연산자 우선순위 : and > or
print(d)
print(e) [연습문제]
print(f) 입력으로 정수를 받아 0이면 zero라고 출력
양수면 positive, 음수면 negative 출력
- 1 -
[연습문제] * 증분은 음수가 될 수 있음
입력으로 season 중에 summer와 winter 입력받음. for d in range(a,b,c):
그리고 temperate 를 정수로 입력받음. - d는 a의 값에서 시작
summer 입력 받고 - c>0일 때, d는 b-1의 값까지 변화
- c<0일 때, d는 b+1의 값까지 변화
temperate가 30이상이면 hot - 증분은 c이다
20-29면 warm - a,b,c는 정수여야 한다
19이하면 cool
* d의 값에 대해서 증가, 감소가 아닌 다른 연산도 가능
winter 입력 받고
[연습문제]
temperate가 10이상이면 warm
1부터 100까지의 자연수에서 5의 배수들의 합을 계산한다.
9이하면 cold
- 2 -
- 행렬의 표현
[ 중심 내용 ]
데이터의 표현
- 이진수
- 아스키코드 (ASCII code)
- 오디어 데이터, 이미지 데이터
- 자료구조
ex) 행렬 간의 곱셈
6. 함수
* 함수사용 이전에 함수가 정의되어야 함.
7. 출력형식
print('A is %3.1f, B is %3d' % (a, b) )
- 각 자리에 대해 0/1장의 카드를 가질 수 있다.
%3.1f : 실수인 a를 총 3자리로 하고,
(안 갖거나 갖거나)
소수점 이하 자릿수는 하나로 표시해라.
- 두 개의 상태로 표현
%3d : 정수인 b를 3자릿수로 표시해라.
점이 보이는 상태(face up) / 뒤집은 상태(face down)
% : 영역구분
ex) 점 4개 있는 카드와 점 1개 있는 카드를 뒤집으면 총 5
[연습문제] 개의 점을 나타낼 수 있음.
한 학생의 성적은 5과목의 성적으로 구성되어있음. ☞ 0-15개의 점을 나타낼 수 있음
5과목의 성적이 리스트에 저장되어 있을 때, 성적을 받아서 ☞ 점이 보이는 카드를 1 / 뒤집은 카드를 0이라 하면
평균과 최고점수를 알려주는 함수를 작성하시오. 5개의 점은 0101으로 나타낼 수 있음
[연습문제]
데이터를 입력받아 필요한 계산을 수행하는 프로그램을 작성
하라. inputData()와 dataProcess()함수 필요.
주함수는 dataProcess(listA)를 호출
- 데이터의 개수가 2개인 경우에는 사각형의 면적, 둘레의 길
이를 출력하고, 3개인 경우는 직육면체의 부피를 출력.
- 3 -
카드 상태 점의 개수
- 바이트 byte = 8bits
0000 0 ☞ 디지털 정보의 단위
- 4 -
- 아날로그 온도계는 빨간 막대가 변하면서 다양한 온도를 표 < 오디오 정보의 표현 >
현하고 디지털은 소숫점 한자리의 온도만 표현 가능하다. 공기의 압력이 귀 속의 막을 진동시키고, 진동이 뇌에 전달되
아날로그 ↔ 디지털 변환 과정에서 문제 발생 가능 면 우리는 소리를 인식함
- 샘플링을 통해 신호를 디지털화
< 팩스 > 주기적으로 전압 측정
문서를 보내는 쪽의 팩스 기계 측정된 전압을 기록
☞ 문서를 읽어 들여서 이미지를 비트맵(bit map)으로 만듦 일부 데이터는 손실될 수 있으나 소리를 충분히 재생가능
문서를 받는 쪽의 팩스 기계 디지털화
☞ 0/1로 표시된 데이터를 비트맵으로 복원하여 이미지 생성 1. 오디오 파형의 높이를 측정
2. 각 높이를 이진수로 표현 ; 1byte로 표현 가정
- 비트맵(bit map) : 격자형으로 이미지를 세분화하여, 각 격
3. 높이는 중 하나의 값
자 내의 명암을 0/1로 표시한 것
4. 실제파형을 근사적으로 묘사 ; 근소한 차
- 비트맵으로 변환한 데이터를 전화선을 통해 가정주파수톤
5. 사람이 인식할 수 없을 정도의 차이 허용
(audio-frequency tone)으로 전송함
- 파형의 높이를 측정하는 간격(측정주기)을 줄이면
실제 파형에 근접
- 측정주기 짧을수록 데이터의 양 증가
- 파형의 높이를 이진수로 표현할 때, 1byte보다 2byte가 더
정확히 표현 가능 / ,
☞ 하나의 데이터를 길게 표현할수록 처리해야하는 정보의 양
증가 - 저장공간 더 필요함
- 5 -
컴퓨터는 아날로그 데이터를 다룰 수 없기에 데이터를 디지털 - 이미지 정보는 픽셀 단위로 나뉘어 디지털 화되어
화 해야함 → 데이터를 여러 개의 조각으로 나타냄.(픽셀) 파일로 저장
- 픽셀(picture element)의 크기에 따라 디지털 이미지 변화 - 이미지가 표현되는 총 픽셀 수를 해상도(resolution)
- 하나의 픽셀은 하나의 정보로 표시
- 레스터(raster) 그래픽 : 픽셀단위로 이미지 데이터를 저장
- 많은 픽셀 수인 경우 이미지를 더 세밀하게 묘사
↔ 벡터(vector) 그래픽 : 좌표와 생성식으로 표현
레스터 그래픽에 비해 작은 데이터의 양으로 이미지
저장 가능 & 이미지 크기 변경 시, 쉽게 생성 가능
- 저장되는 데이터양을 줄이기 위해 다양한 압축방법 사용
☞ bitmap, gif, jpeg, png, tiff 등이 레스터 그래픽 형식
☞ 추상화하면
- 6 -
☞ 컴퓨터 메모리 공간에서 4. 우선순위 큐(Priority queue)
ex) airport check-in
: first class, business class, economy class
병원에 먼저 도착한 일반 환자보다 위중한 환자 먼저
- 우선순위 높은 사람이 우선적으로 서비스 받음
- 힙(Heap)을 이용해 구현하면
☞ 단순 연결 리스트를 표현하면
☞ 뿌리노드에 최대의 우선순위 가진 데이터 위치 ; max 힙
☞ 데이터의 추가, 삭제 시 적절한 작업 필요
- 7 -
7. 트리(Tree)
: 데이터의 계층적인 구조를 나타낼 수 있음
- 이진트리(Binary tree)
1. 문제를 이해한다.
패턴 확인
2. 계획은 세운다. 패턴을 찾는다.
알고리즘 설계
3. 계획을 실행한다. 그림을 그린다.
데이터 표현
4. 풀이과정 재점검
- 8 -
패턴 찾음
search window : 이미 읽은 데이터에서 동일 패턴 찾음
look-ahead buffer : 앞으로 읽어 들여야할 부분
ü 너무 멀리 있는 패턴을 찾으려면 시간 소요됨
search window 크기 제한
- mpeg, jpeg, gif, png 등
ü 너무 긴 패턴을 찾으려면 시간 소요
패턴 길이 제한
Computational Thinking
1. 아리랑 아리랑 아라리요 아리랑 고개를 넘어간다
run-length 인코딩은 어떤 경우에 효과적일까? 나를 버리고 가시는 님은 십리도 못가서 발병난다
인코딩, 디코딩 알고리즘을 설계할 수 있는가?
2. 이런들 어떠하며 저런들 어떠하리
만수산 드렁칡이 얽혀진들 어떠하리
< 텍스트 압축 : LZSS 인코딩 > 우리도 이같이 얽어져 백년까지 누리리라
Computational 문제 해결
문제 해결 과정
Thinking 전략
1. 문제를 이해한다.
패턴 확인
2. 계획은 세운다.
알고리즘 설계 패턴을 찾는다.
3. 계획을 실행한다.
데이터 표현
4. 풀이과정 재점검
Computational Thinking
패턴확인
→ 텍스트의 패턴을 찾는다.
→ 문자열에서 패턴을 찾는 것은 또 다른 문제다.
알고리즘 설계
→ 인코딩 알고리즘과 인코딩된 정보를 디코딩할 수 있느
알고리즘을 만든다.
ex) This is a sample. This is a sample. This is a sample. 데이터 표현
→ This (3,2) a sample. (18,18) → 텍스트는 숫자로 표시된다.
(앞으로 이동하여야 할 길이, 복사하여야 할 길이)
- 동일한 문자열을 앞부분에서 찾아 재활용
- 포인터로 문자열을 대체
- 일정한 크기의 search window 및 look-ahead buffer 대해
- 9 -
< 후프만 코드 > - 코드 부여 방법
ü 이진트리이므로 최대 2개의 children가짐
ü 각 노드에 연결된 에지 하나에
0(왼쪽 자식)/1(오른쪽 자식)을 부여
ü 뿌리에서 시작하여 말단노드로 이동하면서
에지에 부여된 0/1을 연속적으로 읽음
ex)
Computational 문제 해결
문제 해결 과정
Thinking 전략
ex) 파일 F = abbaca
1. 문제를 이해한다.
추상화 문자 전치코드 1 전치코드 2
2. 계획은 세운다. 그림을 그린다.
알고리즘 설계 a 0 10
3. 계획을 실행한다. 창조적 생각
데이터 표현 b 10 11
4. 풀이과정 재점검
c 11 0
[방법1] 총 비트 수 9 11
모든 알파벳에 같은 길이의 코드를 부여한다. 예를 들어 아스 다음과 같은 경우 최적코드는 전치코드 1이 된다.
키코드 활용, 아스키코드는 8비트 사용.
- 문제점 : 자주 나타나는 문자나 자주 나타나지 않는 문자가 * 전치코드에 따라 최종 인코딩된 파일의 크기 달라짐
모두 같은 길이의 코드를 갖게 됨. * 최적 전치코드를 구하는 방법필요
ex) AAAAABCCC
A:00 / B:01 / C:11이면 인코딩 후 < 후프만 코드 생성 방법 >
000000000001111111 으로 총 18비트 소요 1. 인코딩하려는 n개의 데이터에 대해 빈도수를 표시하여
n개의 노드 생성
[방법2] 2. 두 노드의 빈도수의 합이 최소가 되는 노드를 찾음
자주 나타나는 문자는 짧은 코드, 자주 나타나지 않는 문자는 3. 두 노드를 합병시켜 이진트리로 만듬
긴 코드 부여. 4. 모든 노드가 하나의 이진트리로 합쳐질 때까지 2,3 반복
ex) AAAAABCCC
A:0 / B:01 / C:1이면 인코딩 후
0000001111 으로 10비트 소요
- 문제점 :
ü 01이 있는 경우 A, C인지 B인지 구분할 수 없음
ü 문자를 나타내는 영역을 구분하기 위해 구분자를 넣으면
인코딩 후 파일 크기가 증가 ex) 0/0/.../01/1/1/1
[방법3]
코드의 길이가 가변적이면서, 구분자 없이 코드를 구분해 낼
수 있는 방법 필요 (가변길이 코드 / 전치코드)
- 전치코드
abc의 전치는 a,ab,abc,가 됨
한 문자의 코드가 다른 문자의 코드의 앞부분이 될 수 없음
ex) a:11 / b:0 / c:10 등 - 전치코드
ex) if a:01 / b:0 일 경우, 0을 어떻게 해석할지 결정불가
ü앞으로 읽을 비트를 확인하지 않아도 코드 해석 가능
ü트리구조를 이용해서 코드부여
* 왼쪽으로 이동 시 0 / 오른쪽으로 이동 시 1 부여
- 10 -
* 풀이과정을 재점검
- 자주나타나는 문자는 짧은 코드 가짐 Computational Thinking
- 트리의 성질에 따라 코드는 전치코드
- 일상생활에서 컴퓨터의 파일을 별도의 공간에 백업
- 코드마다 크기가 다르므로 가변길이 코드
(backup)하는 것과 같은 개념
- 여러 개 복사하는 것과 안정성과의 trade-off
[연습문제]
- 단순한 방법
다음의 문자 빈도수가 있을 때 문자들의 후프만코드를 구성하
라.
A:1 / B:5 / C:2 / D:4 / E:7 / F:3
2. 패리티 비트(Parity Bit)
[problem]
--------------------------------------------- 수신자가 수신한 데이터 B에는 송신자가 보낸 원래의 데이터
< 오류 확인(Error Detection) > A와 다른 정보가 존재하는 지를 수신자가 알아낼 수 있는 방
송신자가 보낸 정보는 악의적인 조작 또는 통신 오류에 의해 법을 설계하라.
전송 중간 단계에서 변해서 수신자에게 전달 될 수 있다.
Computational
문제 해결 과정 문제 해결 전략
Thinking
1. 문제를 이해한다.
2. 계획은 세운다. 알고리즘 설계 모델 사용
3. 계획을 실행한다. 데이터 분석 창조적 생각
1 반복코드(Repetition Code) 4. 풀이과정 재점검
- 송신자는 정해진 횟수만큼 반복하여 정보를 전송
- 3개의 정보가 같으면 변조 없음을 확인 [해결방안]
- 3개의 정보가 모두 동일하게 달라질 확률을 없다고 가정 데이터A 에 패리티 비트 추가하여 데이터 A'생성
- 3개의 정보가 모두 같지 않으면 변조 발생 확인
ü 짝수 패리티(even parity)
ü 1의 개수가 짝수
- 11 -