You are on page 1of 11

[ 중심 내용 ] 2.

입력, 출력
- 파이썬 소개 및 설치 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

[연습문제] 100부터 200까지의 자연수 중에서 홀수의 합을 계산한다.


자연수 한 개 입력받아 짝수면 “짝수”, 홀수면 “홀수”
* 나머지 연산 %
[연습문제] ex) 20%2 = 0 ; 20을 2로 나누었을 때 나머지는 0
5의 배수면서 4의 배수면 “20의 배수” 21%2 = 0 ; 21을 2로 나누었을 때 나머지는 1
5의 배수면 “5의 배수” ---------------------------------------------
4의 배수면 “4의 배수” 5. 리스트
--------------------------------------------- 리스트 : 여러 개의 데이터들을 저장하는 자료형
- 하나의 이름을 사용
[ 중심 내용 ]
- 이름과 위치를 나타내는 첨자를 결합하여 변수 표현
파이썬
- 외형은 배열이지만 내부적으로는 연결리스트로 구현됨
- 반복
- 다른 프로그램의 배열과 연결리스트의 기능을 복합적으로
- 리스트
가짐.
- 함수
ex) a = [0,0,0,0,0,0] (==) a = [0]*6
- 출력 형식

4. 반복 * 리스트의 구성요소를 직접 반복문에 불러올 수 있음.


ex) * 리스트에서 지원하는 함수를 이용하여 다양한 기능 구현가
능. -> 리스트명.함수명(파라미터)
sum = 0 sum = 0
리스트명.함수명(리스트명)
for d in range(10): d = 0
- 함수 종류
sum = sum + d while d<20:
sort : 작은수 - 높은수 정렬
print("합 = ", sum) sum = sum + d append : 추가 (맨 오른쪽에 추가)
d = d + 1 remove : 삭제 (맨 오른쪽에 있어야만 삭제 가능한지?)
print("합 = ", sum) count : 개수를 셈
reverse : 역으로 나열
합 = 45
pop() : 제일 우측 값 빼냄
>>>
pop(1) : 인덱스1에 있는 데이터 제거
* for d in range(k) 는 d가 0부터 k-1까지 변한다. len : 리스트 내의 데이터 개수
max : 최대
ex) 1부터 10까지 홀수만 더하기
min : 최소
sum = 0
for d in range(1,11,2): ex) 리스트 가운데 값 출력하기
sum = sum + d a = [4,1,3,9,10]
print(d) a.sort()
print("합 = ", sum) n = len(a)
d의 값을 1부터 10까지 씩 증가시켜서 1,3,5,7,9의 합 계산 n = int(n/2)
print(a.pop(n))

- 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()함수 필요.

주함수는 listA = inputData()를 호출함


- 양의 값을 갖는 데이터를 입력받아 리스트에 저장
- 마지막 데이터가 0인 경우 리스트 입력 종료
- 리스트를 주함수에 전달

주함수는 dataProcess(listA)를 호출
- 데이터의 개수가 2개인 경우에는 사각형의 면적, 둘레의 길
이를 출력하고, 3개인 경우는 직육면체의 부피를 출력.

- 3 -
카드 상태 점의 개수
- 바이트 byte = 8bits
0000 0 ☞ 디지털 정보의 단위

0001 1 ☞ 프로그램에서 데이터를 저장하는 길이 = 바이트의 배수


ex) 정수 = 1바이트, 실수 = 2바이트, 문자 = 1바이트
0010 2
0011 3 1 KB = 1,024bytes
1 MB = 1,024 KB
⋯ ⋯
1 GB = 1,024 MB
1111 15 1 TB = 1,024 GB
☞ 카드상태가 이진수의 표현을 나타냄
< 왜 컴퓨터에서는 이진수를 사용할까? >
+ 카드의 상태를 나타내기 위해 반드시 0/1 사용X - 두 개의 상태보다 많은 수의 상태를 나타낼 방법이 없음
다른 부호로도 표시 가능 - 이진수를 사용하여 on, off의 상태를 표시
ex) - 십진수를 이용하면, 0-9까지의 10개 상태를 구분할 수
있는 장치를 개발해야함
- 모든 데이터는 0/1로 나타냄

< 펀치카드(Punch card) >


: 1960-80년대 초반까지 데이터를 저장하기 위해 사용함

< 이진수 → 십진수 변환 >


이진수      … 
   또는    …  가 나타내는 십진수는
             …   
☞ 이진수 1110 →        ∙   

< 십진수 → 이진수 변환 > - 구멍의 유무로 0/1 표시


십진수로 표현된 수 a를 2로 나눠준 뒤, 나머지를 차례대로
- 한 열(세로줄)이 나타낼 수 있는 정보의 종류는  가지
이으면 이진수가 된다.
- 펀치카드리더는 구멍을 통과하는 빛의 유무로 0/1표현
ex)

< 데이터와 컴퓨터 >


- 컴퓨터는 디지털로 표현할 수 있는 모든 정보형태 처리가능
- 각 정보형태에 대해 다양한 작업처리 가능
- 정보의 생성, 저장, 이동, 복사, 표시, 삭제 작업 가능
- 정보형태 :
+ n자리의 이진수가 나타낼 수 있는 음이 아닌 정수의 범위
텍스트(숫자, 문자), 오디오, 이미지 및 그래픽, 비디오
   ~  / 최댓값 =   , 최솟값 = 0
아날로그 데이터 : 연속된 공간상의 데이터로 표시
디지털 데이터 : 정보를 이산적으로 표시
< 이진수와 컴퓨터 >
- 컴퓨터는 binary digit or bit 라는 저장단위를 가짐.
☞ 트랜지스터, 축전지(콘덴서, capacitor) 사용 시
낮은 전압 = 0, 높은 전압 = 1
- 전화선은 high and low-pitched tone으로 0,1표현
- 마그네틱 디스크에서는 자기장의 방향으로 0,1표현
- CD는 홈의 유무
- 바코드는 줄의 유무

- 4 -
- 아날로그 온도계는 빨간 막대가 변하면서 다양한 온도를 표 < 오디오 정보의 표현 >
현하고 디지털은 소숫점 한자리의 온도만 표현 가능하다. 공기의 압력이 귀 속의 막을 진동시키고, 진동이 뇌에 전달되
아날로그 ↔ 디지털 변환 과정에서 문제 발생 가능 면 우리는 소리를 인식함
- 샘플링을 통해 신호를 디지털화
< 팩스 > 주기적으로 전압 측정
문서를 보내는 쪽의 팩스 기계 측정된 전압을 기록
☞ 문서를 읽어 들여서 이미지를 비트맵(bit map)으로 만듦 일부 데이터는 손실될 수 있으나 소리를 충분히 재생가능
문서를 받는 쪽의 팩스 기계 디지털화
☞ 0/1로 표시된 데이터를 비트맵으로 복원하여 이미지 생성 1. 오디오 파형의 높이를 측정
2. 각 높이를 이진수로 표현 ; 1byte로 표현 가정
- 비트맵(bit map) : 격자형으로 이미지를 세분화하여, 각 격
3. 높이는    중 하나의 값
자 내의 명암을 0/1로 표시한 것
4. 실제파형을 근사적으로 묘사 ; 근소한 차
- 비트맵으로 변환한 데이터를 전화선을 통해 가정주파수톤
5. 사람이 인식할 수 없을 정도의 차이 허용
(audio-frequency tone)으로 전송함
- 파형의 높이를 측정하는 간격(측정주기)을 줄이면
실제 파형에 근접
- 측정주기 짧을수록 데이터의 양 증가
- 파형의 높이를 이진수로 표현할 때, 1byte보다 2byte가 더
정확히 표현 가능 /     ,     
☞ 하나의 데이터를 길게 표현할수록 처리해야하는 정보의 양
증가 - 저장공간 더 필요함

☞ D라는 문자를 픽셀들의 격자로 표현


위의 이미지를 0(white)/1(black)의 비트맵으로 전송
첫 번째 줄 - 111000
두 번째 줄 - 101110
- 저장된 매체에 있는 오디어 데이터는 장비를 통해 전기적
< 텍스트 표현 > 신호로 바뀌어 스피커에 전달
- 컴퓨터 시스템을 이루는 각 컴포넌트 간에 미리 정한 규약 - 전기적 신호는 스피커에서 소리를 발생시킴
으로 문자를 표현함 ; 코드code
< CD >
- ASCII ; 정보교환을 위한 미국표준코드
- 코드를 받은 각 기기는 변환프로그램을 통해 코드에 해당하
는 문자를 생성함

< 아스키코드(ASCII code) >


: 각 문자를 7bit로 표현 (총 128개의 문자 표현 가능)
- 확장된 아스키코드 : 8bit를 사용하는 코드체계

< 16진수(Hexadecimal) >


: 16개 표시 사용 - 0-9, A-F
- 아스키코드의 16진수 표현
< 오디오 형식>
ex) 00111100 → 3C
- RAW, WAV, AU, AIFF, MP3 등
01000001 → 41
- MP3를 가장 많이 사용

< 유니코드(Unicode) 문자 세트 >


< 이미지와 그래픽 표현 >
: 아스키코드를 포함하는 확장된 아스키코드로 존재하는 모든
- 색을 구분하는 것은 빛의 파장
문자를 나타낼 수 없음
- 우리 눈의 망막에서 빛 파장을 인식
- 한 문자를 16bit로 표현 ;  개의 문자 표현
- 망막은 세 종류(red, green, blue)의 광수용체(빛을 신경자
- 아스키코드를 포함함
극으로 바꾸어 주는 감각세포)를 가짐

- 5 -
컴퓨터는 아날로그 데이터를 다룰 수 없기에 데이터를 디지털 - 이미지 정보는 픽셀 단위로 나뉘어 디지털 화되어
화 해야함 → 데이터를 여러 개의 조각으로 나타냄.(픽셀) 파일로 저장
- 픽셀(picture element)의 크기에 따라 디지털 이미지 변화 - 이미지가 표현되는 총 픽셀 수를 해상도(resolution)
- 하나의 픽셀은 하나의 정보로 표시
- 레스터(raster) 그래픽 : 픽셀단위로 이미지 데이터를 저장
- 많은 픽셀 수인 경우 이미지를 더 세밀하게 묘사
↔ 벡터(vector) 그래픽 : 좌표와 생성식으로 표현
레스터 그래픽에 비해 작은 데이터의 양으로 이미지
저장 가능 & 이미지 크기 변경 시, 쉽게 생성 가능
- 저장되는 데이터양을 줄이기 위해 다양한 압축방법 사용
☞ bitmap, gif, jpeg, png, tiff 등이 레스터 그래픽 형식

< 자료구조(Data Structure) >


: 알고리즘을 구성하는 기본 부품
- 리스트(List)
< RGB 모델 >
: 유한한 데이터를 저장하는 공간
- 색은 삼원색인 RGB의 세 종류의 값(0-255)으로 나타냄
배열이나 연결리스트로 구현
- 각 색은 8bit로 표현. 총 24bit
ex) (255, 0, 255) : red와 blue 최대화, green 최소화 1. 배열(array)
→ 보라색 나타냄 : 저장 가능한 데이터의 최대 개수가 고정된 리스트
ex) 아파트 우편함
< 색깔 깊이(color depth) > - “변수명[]”의 형태로 프로그래밍 언어에서 사용
: 색을 나타내는 데 사용되는 데이터 양 ex) a[0], b[3], mail_box[5], sale_2015[7] 등
☞ High color - C++, Java, Python에서 array index는 0에서 시작
- 15bit 사용 : 각 색은   가지, 총   가지 - 배열의 정의
- 166bit 사용 : 녹색   가지, 총 가지 ex) m_box[6] : m_box의 이름으로 6개의 저장공간 설정
☞ True color - 정의된 개수보다 더 많은 데이터 저장 불가
- 24bit 사용, 각 색은    가지, 총   
☞ Deep color (30/36/48-bit) 2. 연결리스트(linked list) : 데이터의 개수가 가변적
- 단순 연결리스트(singly linked list)
+ HTML에서 색의 표현

-    는 16진수로 FF → 한 지점에 가면 그곳의 데이터와 다음으로 이동할 위치정


보 있음
→ 방문한 지점의 물리적인 위치 중요X
+ HTML파일의 색 지정
→ 방문한 지점의 논리적인 위치 중요

☞ 추상화하면

- 6 -
☞ 컴퓨터 메모리 공간에서 4. 우선순위 큐(Priority queue)
ex) airport check-in
: first class, business class, economy class
병원에 먼저 도착한 일반 환자보다 위중한 환자 먼저
- 우선순위 높은 사람이 우선적으로 서비스 받음
- 힙(Heap)을 이용해 구현하면

☞ 단순 연결 리스트를 표현하면
☞ 뿌리노드에 최대의 우선순위 가진 데이터 위치 ; max 힙
☞ 데이터의 추가, 삭제 시 적절한 작업 필요

- 이중 연결리스트(doubly linked list) 5. 스택(Stack)


: 데이터가 쌓여 있는 현상
- push / pop 만 가능

- 활용 : 검색방법에서 사용되는 되추적(backtracking)의 기


본 구조에 사용, 프로그램에서 함수호출의 구현
→ 한 지점에 가면 그 곳의 데이터와 앞과 다음으로 이동할
위치정보 있음
6. 그래프(graph)
→ 방문한 지점의 물리적인 위치 중요X
- 두 개의 객체가 연결되는 것이 에지로 표현됨
→ 방문한 지점의 논리적인 위치 중요
- 연결된 객체는 수학적인 추상화인 노드로 표현되고,
☞ 컴퓨터 메모리 공간에서
각각의 연결은 에지로 표현됨
- SNS의 관계를 나타냄

ex) 컴퓨터 공학과의 교과목 이수 체계도

3. 큐(queue) : 서비스를 받기 위한 대기열(줄)


- 리스트의 특별한 구조
- 선입선출 : 먼저 도착한 데이터 먼저 처리

- 7 -
7. 트리(Tree)
: 데이터의 계층적인 구조를 나타낼 수 있음

- 이진트리(Binary tree)

- 수신하는 쪽에서는 수신하는 숫자를 해석하여 동일한 이미


지 생성 가능
- 각 줄에 있는 픽셀의 개수를 알고 있으므로 연속적인 숫자
를 줄 단위로 해석 가능
→ 트리의 단순한 형태
→ 각 노드는 최대 2개의 자식노드 가질 수 있음
Computational Thinking
→ DB의 자료 저장 자료 구조로 활용
패턴확인
→ 패턴을 찾는다.
[ 중심 내용 ]
→ 연속된 하얀색 픽셀, 검은색 픽셀의 개수 파악
데이터의 표현
- 인코딩 및 압축 알고리즘 설계
- 오류확인 → 하얀색 픽셀, 검은색 픽셀의 개수를 전송하는 알고리즘
→ 수신 후 이미지 재구성 알고리즘 설계
- 인코딩 : 정보를 코드로 표현하는 것
데이터 표현
- 디코딩 : 코드로 표현된 것으로부터 정보를 추출하는 것
→ 전체 종이를 여러 개의 픽셀로 그리드 형성
* 인코딩 시 가능한 저장 공간을 줄이려고 함 ; 압축
→ 각 픽셀의 색을 구분
* 팩스가 이미지를 전송하는 과정에서 white를 0, black을 1
의 비트맵으로 전송하는 것을 인코딩이라 한다.
[연습문제] 다음을 run-length 인코딩 방식으로 인코딩하라

[연습문제] run-length 인코딩 방식의 다음 데이터를 수신하


였다. 아래의 칸에 이미지를 그리시오. 처음 숫자가 white 픽
Computational 문제 해결 셀의 개수, 한 줄은 15칸으로 구성.
문제 해결 과정
Thinking 전략

1. 문제를 이해한다.
패턴 확인
2. 계획은 세운다. 패턴을 찾는다.
알고리즘 설계
3. 계획을 실행한다. 그림을 그린다.
데이터 표현
4. 풀이과정 재점검

- 중복되는 데이터가 많기 때문에 그림 우측의 데이터만 전송


☞ run-length 인코딩 방식으로 데이터 압축방법 일종
문서를 팩스로 송신할 때, 이진수로 표현하기 위한 격자모양
- 단순한 압축 방법
- 이 외에도 다양한 압축 알고리즘 존재

- 8 -
패턴 찾음
search window : 이미 읽은 데이터에서 동일 패턴 찾음
look-ahead buffer : 앞으로 읽어 들여야할 부분
ü 너무 멀리 있는 패턴을 찾으려면 시간 소요됨
search window 크기 제한
- mpeg, jpeg, gif, png 등
ü 너무 긴 패턴을 찾으려면 시간 소요
패턴 길이 제한

< Run-Length 인코딩 >


- 하나의 문자는 여러 번 나타날 수 있음
- 반복된 문자열을 다음의 두 가지 구성 요소로 대체함
반복된 문자 / 반복 횟수
- 하나의 패턴을 2개의 숫자로 표시
ex) bbbbb → b5
ü 일정한 크기 이상의 패턴에 대해서만 재활용해야 압축효과
ex) aaaakkbbbbbbbbgggggcccccc → a4kkb8g5c6
ü 압축한 길이가 원래 길이보다 짧아야 함
k는 인코드 되지않음 ∵이득이 없음
(압축한 후의 데이터 크기가 입축 전보다 줄어야 함)
[연습문제]
압출률은 10/25 or 0.4
다음 문장에 대해 화살표를 이용하여 압축을 표시하시오.
( 압축률 = 인코딩된 후의 길이/원래 텍스트 길이 )
(2개 문자 이상의 문자열에 대해)

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의 개수가 짝수

짝수(even) 패리티 : 1의 개수가 짝수가 되도록 설정하는 방법


Computational
문제 해결 과정 문제 해결 전략 홀수(odd) 패리티 : 1의 개수가 홀수가 되도록 설정하는 방법
Thinking
- 정상 수신의 경우
1. 문제를 이해한다. ü 송신자는 패리티 비트를 포함한 데이터A' 송신
대칭성질을 이용
2. 계획은 세운다. 알고리즘 설계 ü 수신자는 데이터A' 수신
모델 사용
3. 계획을 실행한다. 데이터 분석 ü 패리티 비트의 정보가 데이터와 일치하므로 오류 없음
창조적 생각
4. 풀이과정 재점검 - 비정상 수신의 경우
ü 송신자는 패리티 비트를 포함한 데이터A' 송신
ü 제 3자가 A' 변조
ü 패리티 비트의 정보가 데이터와 불일치
ü 일치하지 않는 정보의 위치는 확인 불가

- 11 -

You might also like