You are on page 1of 20

1.

컴퓨팅 사고력의 소개

1. 컴퓨팅 사고력 소개
- 과목 목표 : 비전공자는 컴퓨터가 문제를 해결하는 원리는 알아야 한다.
(computational thinking 과목을 통해)
: 비전공자가 컴퓨터공학전공 과목을 배우지 않고, computational thinking을
배워 컴퓨터가 문제를 해결하는 방식을 익힌다.
: 컴퓨터과학자처럼 생각하여 문제를 해결하는 방법론을 제시
- 컴퓨터공학입문(전공자들 기초)
-> 비전공자들이 컴퓨터공학을 배우지 않는 한, 자신들의 문제에 대해 컴퓨터가 문제를 해
결하는 방식을 적용하는데 어려움이 있다.
-> 컴퓨터 공학을 배우기 위해 하드웨어 구성요소, 하드웨어 작동 원리, 소프트웨어 종류,
프로그래밍 언어, 프로그래밍 기법, 자료구조, 알고리즘, 운영체제 등 다수 전공 과목을 배움.
-> 프로그램을 배울 때는 복잡한 형태의 프로그래밍 언어부터 배운다.
- 현재 방식 : 컴퓨터공학 비전공자가 전공자에게 문제를 설명해 주면, 전공자가 문제를 해결
한 후 결과를 준다.
-> 문제점 : 영역이 다르므로 , 컴퓨터전공자가 문제를 정확하게 이해하기 어렵다
: 문제가 불완전하게 해결될 경우, 몇 번의 추가 의뢰, 해결 단계를 거쳐야 한다.
-> 앞으로 : 컴퓨터공학 비전공자가 자신의 영역에 있는 문제를 직접 해결한다.

2. 컴퓨팅사고력 (computational thinking)


- 최근 : 코딩 자체보다는 프로그램의 구조와 컴퓨팅 사고력을 이해하는 것을 요구
-> 컴퓨팅 사고력을 기반으로 한 소프트웨어의 설계가 필요
- 컴퓨팅 사고력은 코딩의 지적핵심.
- computational thinking = critical thinking skills + power of computing
- 처음 제안한 사람 : 지넷 윙
- 데이터를 모으고, 분석하는 문제해결 과정이고, 컴퓨터가 해결할 수 있는 형식으로 문제를
정형화하는 과정
- CT의 비공식적인 정의 : 계산적인 해를 만들도록 문제를 정형화하는 정신적인 활동을 나
타낸다. 그 해는 인간 또는 기계 , 또는 더 일반적으로 인간과 기계의 결합에 의해 수행된다.
- CT는 문제를 정형화하는 과정과 문제의 해에 포함된 사고과정. 그 풀이 과정은 정보처리
장치에 의해 효과적으로 수행될 수 있는 형태로 묘사된다.
- 다양한 컴퓨터 프로그래밍 언어 : Ada, BASIC, C, C++, C#, COBOL, Fortran, PL/1,
REXX, Java, Lisp, Pascal, Object Pascal, Python
- 운영체제 : 컴퓨터 하드웨어 , 소프트웨어를 관리 , 통제하는 기능을 수행

3. computational thinking의 개념
① 분해 : 하나의 큰 문제나 절차, 데이터 모음, 상황, 조건을 다루기 쉬운 작고 단순한 단
위로 나누는 과정
② 패턴 확인 : 데이터나 문제 내에 있는 패턴, 반복형태, 추세(trend), 규칙성을 도출한다.
③ 추상화 : 문제나 상황에서 중요한 요소만을 추출한다 . 이 때 자세한 사항은 무시한다 .
④ 알고리즘 설계 : 문제를 해결하는 방법이나 작업을 수행하는 절차를 정의한다 .
⑤ 데이터 표현 : 문제를 해결하는 데 필요한 데이터를 적절한 형식으로 표현한다.
⑥ 데이터 모음 : 이후의 활용을 위해 정보를 모으는 과정과 저장된 형태를 포함한다.
⑦ 데이터 분석 : 모인 데이터로부터 필요한 결과를 도출하기 위해 데이터를 분석하는 과정
을 포함한다.
⑧ 모의실험 : 현실적인 제약에 의해 실제의 상황을 축소 또는 다른 방법으로 모방하는 모
델을 구축한다.
⑨ 자동화 : 중간단계에서 인간이 간섭하지 않는 상태로, 컴퓨터나 기계로 반복적인 작업을
하도록 한다.
⑩ 병렬화 : 서로 간섭하지 않거나, 선후관계가 없는 작업을 동시에 수행한다.
⑪ 패턴 일반화 : 도출된 패턴, 모델, 공식을 다른 데이터에 대해 일반화시켜 확장한다.

- ① 분해
B 하나의 복잡한 문제를 해결하는 것은 어려움 -> 작은 문제들로 구분하여 각각 해결
B 각각의 작은 문제들을 더 자세히 들여다볼 수도 있다.
B ex. 냉장고 교체 - 교체하는 방법을 결정하는 것은 다음의 작은 문제들로 나뉜다.
: 제품 선정 방법, 구매 방법, 기타(ppt 40)
B ex. 아파트에서 재활용품을 모으는 프로그램을 시작할 때 해결해야 할 문제(ppt 44)
B ex. 버스 정류장에서 승객대기자 분리 / 버스체계 , 버스중앙차로

- ② 패턴 확인
B 복잡한 문제를 작은 문제로 나누다 보면, 작은 문제들 간 존재하는 패턴, 유사성 존재
B 문제들이 공유하는 패턴을 찾는 것이 중요
: 하나의 문제 해결한 방법 -> 다른 문제에 적용하는 방식 -> 다른 문제들 쉽게 해결
B 공유하는 많은 패턴을 찾을수록 문제를 쉽게 해결
B 패턴은 서로 다른 문제 간에 존재할 수도 있고, 각 문제 내에 존재할 수도 있다.
(자동차 간 : 타이어와 축의 위치 결정 / 자동차 내 : 몸체와 바퀴 연결 장치 네 개)
B 서로 다른 형태의 물체 간에도 패턴이 존재할 수 있다.
B 연산의 패턴을 이용해 연산 단순화 가능
B 프로그램의 패턴 : 입력 -> 연산 및 처리 -> 출력
B ex. 몸무게와 키의 상관관계
B ex. 자동차를 그릴 때 - 전조등, 몸체 , 4개의 바퀴, 핸들 , 문 , 색깔, 바퀴모양 등
B ex. 집 짓기 문제에서 유사 패턴 : 설계도 작성 , 허가 , 기초 공사, 마감 공사
B ex. 라면류 조리 방법 : 물 끓이기 -> 면 , 스프, 후레이크 넣기 -> 수 분 더 끓이기
B ex. 회원가입

- ③ 추상화
B 해결하려는 문제에 존재하는 부수적인 (중요하지 않은) 사항들을 제거하는 과정
B 일반적인 특징을 도출, 개별적인 특징 제거(문제를 푸는데 도움 안 되는 사항들을 배제)
B 추상화를 통해 문제가 무엇인지 , 어떻게 해결해야 하는지의 일반적인 생각 도출 가능
B 문제의 모델 정립
. ex. 여러 종류 비행기 -> / 여러 종류 자동차 ->
. ex. 자동차 그릴 때 – 일반적 특징 :몸체, 4개의 바퀴, 전조등, 유리창을 그리면 충분
- 개별적 특징(부수적) : 바퀴재질, 자동차 색, 문 개수, 바퀴모양 등
. ex. 한국어 문법 추상화 : 주어 + 서술어 / 주어 + 목적어 + 서술어
. ex. 주기율표 : 물질정보에 대한 추상화 / 도형, 그래프 / 지하철 노선

- ④ 알고리즘 설계
. 문제를 해결하기 위한 계획, 일련의 단계적인 명령이다. 
. 일상에서 어떤 일을 할 때 수행하는 절차 - 이미 많은 일을 알고리즘에 따라 수행 중
ex. 생일파티 준비, 음식 준비 순서, 여행 가방 준비, 페인트 작업 등
. 문제를 해결하는 계획은 구체적 + 정확하게 기술하기 위해 알고리즘으로 표현된다.
. 추상화(부수적 사항 제거), 분해(단계별 결정사항으로 분해 ), 패턴확인 과정 거쳐 정형화
. 컴퓨터는 주어진 프로그램(알고리즘)에 따라 작업을 수행
. 프로그램을 만드는 초기 상태로 흐름도 또는 의사코드(pseudocode)로 나타낸다.
. 의사코드 : 알고리즘이 수행하는 작업을 나타내기 위한 if k >60
프로그래밍 언어와 유사한 문법을 가진 언어 표현 type “old ”
else
- 의사(疑似): 실제와 비슷한
type “young”
- 알고리즘을 표현하는 하나의 방법, 프로그래밍 언어x
. 흐름도 : 수행해야 할 일들을 다이아그램으로 표현한 것
. 문제에 대한 해결방법을 설계한 후 그 방법을 평가하는 과정이 필요
- Dry run : 펜과 종이를 이용해서 알고리즘이 올바르게 작동하는지 확인하는 작업
- 평가는 설계한 알고리즘이 문제의 해를 제대로 찾는지,
해를 찾는 과정이 효과적인지를 확인하는 절차
- 예상 가능한 모든 경우의 문제에 대해서 의도한 대로 알고리즘이 동작하는지 확인
- 평가 과정 없다면 결과가 정확한 해인지 확신 불가 -> 해에 도달하는 과정 비효율적
-> 실제 문제에 대해 예상하지 못한 결과 초래 가능
. 알고리즘 작성 후 확인할 것 : 알고리즘이 정확히 기술되었는지 ?
알고리즘이 충분히 단순화되었는가?
알고리즘이 충분히 분해되어 모듈화되었는가?
다양한 경우의 문제에 대해 답이 맞는가?
가능한 한 문제를 빨리 해결하도록 설계 되었는가?
가능한 한 변수들의 개수가 작도록 설계 되었는가?
- ⑤ 데이터 표현
. 문제를 해결하는데 필요한 데이터를 적절한 형식으로 표현한다.
. 모든 데이터는 이진수로 표현( PPT2-27)
. 문자의 표현 : 아스키 코드
. 색깔의 표현 : RGB 방식(Red, Green, Blue의 조합으로 표현)
- 색깔은 0부터 255까지의 수준으로 나타냄.(모두 0 -> BLACK, 모두 255 -> WHITE)
- 각 색깔이 8비트 -> 총 24 비트로 표현
- 총 표현 가능한 색깔 수는 2563=16,777,216
- ⑥ 데이터 모음
. 이후의 활용을 위해 정보를 모으는 과정과 저장된 형태를 포함한다.
. 방대한 데이터를 어떻게 모으고 저장할 것인가?
. 데이터의 무질서한 저장 = 쓰레기 더미 -> 정리하여 저장하는 체계가 필요
- 펀치카드(1959), 테이프 스토리지(2011), 하드디스크
. 이진 검색 트리 : 맨 위에 뿌리 노드를 중심, 왼쪽 하위 트리에 자신보다 작은 값이 저
장되고, 오른쪽 하위트리에는 자신보다 큰 값이 저장되는 방법을 각 노드마다 재귀적으로 적
용하여 생성되는 트리
. ex. 데이터 정렬 - 단어사전에서 단어는 항상 정렬된 상태
- 학생의 정보도 데이터가 사용되는 용도에 따라 이름 or 과별로 정렬

- ⑦ 데이터 분석
. 모인 데이터로부터 필요한 결과를 도출하기 위해 데이터를 분석하는 과정을 포함한다.
. 정리된 데이터를 이용해서 무엇을 알아낼 것인가?
. 데이터 분석 과정 :데이터에 포함된 의미를 분석해 내는 과정
   - 평균 , 중앙값 등의 통계학 기법을 사용
- 데이터 시각화(visualization) 방법 사용

- ⑧ 모의실험
. 현실적인 제약에 의해 실제의 상황을 축소, 다른 방법으로 모방하는 모델을 구축
. 실 세계의 작업 또는 시스템을 흉내 내어 반복적으로 시도하는 작업
. 거의 모든 분야에서 시도(비행, 자동차, 경제학, 재정학, 기후학, 군사, 로봇, 통신,
인공위성, 우주개발, 스포츠, 판매, 은행, 기계장치, 도시개발 등)

- ⑨ 자동화
. 중간단계에서 인간이 간섭하지 않는 상태, 컴퓨터나 기계로 반복적인 작업을 하도록 함
. 작업은 알고리즘에 의해 수행된다 .
. 컴퓨팅(Computing): 추상화의 자동화 의미(추상화 -> 자동화의 전체과정)
- 추상화 : 인간이 할 수 있는 정신적 도구다.(지넷 윙)
: 사물을 관찰하거나 문제를 정의하는 과정에서 추상화가 진행된다 .
- 자동화 : 추상화된 개념은 컴퓨터에 의해 자동화되어 반복적으로 수행될 수 있다.
: 추상화된 개념이 의사코드를 거쳐 알고리즘으로 개발된 후,
다시 컴퓨터 프로그램으로 만들어져서 컴퓨터에 의해 반복적으로 수행

- ⑩ 병렬화
. 서로 간섭하지 않거나 , 선후 관계가 없는 작업을 동시에 수행한다.

- ⑪ 패턴 일반화
. 도출된 패턴, 모델, 공식을 다른 데이터에 대해 일반화시켜 확장한다.
. ex. 다양한 자동차를 하나의 단순한 그림으로 표현 가능 - 단순한 모델을 만들기 때문
-> 이를 일반화시켜 다른 자동차에게도 적용할 수 있다.
4. 주위에서 볼 수 있는 컴퓨팅 사고력
- CT의 효과
. 컴퓨터가 문제를 해결하는 방식 적용(인간의 사고방식 반영 ) -> 문제 해결
. 문제의 해결에 대한 보다 효과적인 방법 고안 가능
. 컴퓨터 (계산 도구 )의 적극적인 활용방안을 고안 가능
. 문제의 어느 부분이 컴퓨터(계산 도구)로 해결 가능한지를 파악 가능
. 컴퓨팅의 한계를 이해할 수 있다.
. 문제 해결에 다양한 알고리즘 방법 (분할정복법 , 탐욕적인 방법 등)을 적용 가능
. 새로 접하는 문제를 해결하는 체계적인 방법론을 익히게 됨
. 새로운 문제에 도전 의식 고취
. 체계적인 문제해결 방법론을 익혀서 최적의 답이 아니어도
지금보다 향상할 수 있는 답을 찾게 해줌.
- 일상생활에서의 소프트웨어적 사유 예
. 버스 정류장 - 분해
. 최단 경로 찾기 - 다익스트라 (Dijkstra) 알고리즘
. 은행, 슈퍼마켓 , 세관, 입국심사에 줄을 선다. - 큐(queue) : 대기열의 자료구조
. 우선순위를 고려한 서비스 – 우선순위 큐
. 최단거리 일주 - 외판원 문제 : 최소의 길이로 네 군데를 모두 한 번씩 방문하는 방법
. 특정 물건 또는 정보 찾기 – 색인(인덱스) / 선형검색, 순차검색 / 색인순차검색
. 여행 가방 준비 - 배낭문제
. 트럭 짐 싣기 - 3차원 bin packing
. ARS 자동 응답기 - 유한상태기계 : 컴퓨터 동작의 가상 기계
. 병렬 처리
. 북마크
. 최소 개수의 CCTV 설치 - 최소노드커버 문제
. 한줄서기
. 최소신장트리 : 그래프 내 모든 노드를 포함하고 ,
트리에 포함된 에지들의 길이 합이 최소가 되는 트리
- 사용 예 : 전선 배선, 수도 파이프 설치, 통신망 구축
. 최소 동전 개수 문제 : 동전의 개수가 최소가 되도록 거스름돈을 주는 문제
- 우리는 일상생활에서 거스름돈을 동전으로 받을 때
어떻게 받아야 거스름돈의 동전 개수가 최소가 되는지를 잘 알고 있다.
-> 최소 동전 개수를 결정하는 알고리즘을 우리는 수행 가능
- 해결방법 : 탐욕적 알고리즘
. 동전 금액이 큰 순서로 확인(선택과정)
. 단계1 P를 초과하는지 확인(적정성점검)
. 단계2 거스름돈 갱신
. 단계3 P=0인지 확인(해 점검)
-> 탐욕적 방법을 기반으로 한 알고리즘이 최적해를 구할 수 있다.
2. 문제해결 방법

1. 문제해결 방법
- 조지 폴리야 (George Polya), <How to Solve it>
. 수학 문제를 푸는 과정에 대한 정의
①단계: 문제를 이해한다.
- 종종 문제를 전체 또는 일부를 이해하지 못해 문제를 해결하지 못하는 경우가 있다
-> 질문 이해했는지 확인 - 문제에서 아는 사실은 무엇이고, 무엇이 모르는 것인가?
- 무엇을 물어보고 있는가? / 문제에서 사용된 모든 단어들을 이해할 수 있는가?
- 문제를 자신의 말로 바꾸어 말할 수 있는가?
- 문제의 해를 찾을 수 있을 정도로 충분한 정보가 있는가?
- 문제를 이해하는데 도움을 주는 그림이나 다이아그램을 그릴 수 있겠는가?
- 문제의 해를 찾기 위해 추가적인 질문이 있는가?
② 단계: 계획을 세운다.
- 최선의 해결전략을 선택하는 능력은 많은 문제를 푸는 과정에서 배우게 됨.
- 문제를 푸는 전략 : 추정과 확인, 순서 리스트 작성, 가능성들을 제거,
대칭 성질을 이용, 특별한 경우를 고려, 직접 추론 사용
방정식을 푼다, 패턴을 찾는다, 그림을 그린다
단순한 문제 해결 시도, 모델 사용, 역방향으로 시도
공식 사용, 창조적 생각, 잔꾀를 사용
③ 단계: 계획을 실행한다.
- 문제해결 전략에 따라 문제해결을 시도하면서 문제해결 과정을 살펴볼 수 있다.
- 선택한 전략이 올바르다는 가정 하에 꾸준히 문제해결을 진행하여야 한다.
- 문제가 제대로 해결되어가는 과정이 아니라면 전략을 수정하여야 한다.
④ 단계: 푸는 과정을 재점검한다.
- 문제해결 과정에서 무엇이 효과적이었고, 무엇이 잘못되었는지를 되돌아 볼 것
-> 유사한 문제를 접하게 됐을 때 효과적인 문제해결 전략을 선택하는 능력 양성됨

2. 문제의 이해 예
- Computational thinker가 되는 위해
. 세상에는 다양한 문제가 존재한다, 미리 모든 문제를 해결하는 방법을 배울 수는 없다.
. 다양한 기존 문제 푸는 경험 -> 문제해결 전략 직접 경험 -> 문제해결 능력 키워야 함
. 새로운 문제에 대한 이해 , 해결전략 수립, 해결방안 설계
-> 직접 문제를 해결, 그 과정 평가.
. 본 교재는 중요한 다양한 문제와 해결방법을 제시
- 스스로 찾은 해결방법과 교재가 제시한 해결방법과의 비교
. 특정한 문제에 대한 해가 무엇인지 보다는 해결해 나가는 과정을 배워야 한다.
. 현대 복잡한 문제는 문제해결을 위한 하나의 전략을 이용한 하나의 해만 존재하는 것이
아니라 다양한 전략을 통해 다양한 해를 도출해 내고, 각 해의 효용성을 비교할 수 있어
야 한다.

3, 문제해결 과정 예
- 문제 해결 단계 : 문제를 이해 -> 계획을 세움 -> 계획을 실행 -> 풀이 과정을 재점검
- 작업의 정규시간 계산 문제(ppt2 77)
- 자동차 정액감가상각과 정률감가상각과 차이 계산 문제(ppt2 80)
- 피라미드에 있는 돌의 개수(ppt3 3)
- n 명이 줄을 서는 경우의 수(ppt3 11)
- 자연수 누적 합 문제(ppt3 14)
- 컴퓨터과학 - 재귀의 형태 : 문제 내에 자신의 형태가 존재
- n 개의 문제는 동일한 (n-1)개 짜리의 문제가 존재

4. 문제해결을 위한 소프트웨어 설계 사상
① 구현하고자 하는 일을 계층적으로 나누어 생각한다.
- 입력 -> 처리 -> 출력
- ex. 학생의 성적처리
② 구현하고자 하는 일을 절차적으로 생각한다.
- 소프트웨어는 하나의 절차를 기본단위로 절차적(순서적)으로 수행된다.
- 작업을 작은 단위로 분해하고, 작은 작업들의 선후 관계를 정한다.
- 하나의 작업이 끝나고, 다음 작업으로 진행하는 과정을 거치면서 작업이 수행된다.
- 절차적인 사고 - 하위절차는 상위 절차의 부차적인 절차로 사용된다.
③ 소프트웨어는 논리적인 기반을 갖고 설계되어야 한다.
- 구성하고 있는 절차가 논리적인 구조에 부합되어야만 원하는 결과를 만들어 낼 수 있다.
- 전체적인 구조뿐만 아니라, 구체적인 절차적인 흐름도 논리에 맞도록 설계되어야 한다.
- 소프트웨어가 왜 이런 구조를 갖게 왰는지를 설명할 수 있어야 좋은 설계라 할 수 있다.
④ 가능한 한 단순한 형태, 구조가 되어야 한다. 추상적으로 생각하여 설계
- 구현하려고 하는 기능에서 구체적인 사항을 제거한 중요한 사항을 도출
- 계층적으로 생각하며, 단순한 형태에서 출발해 자세한 사항으로 진행 – top down 방식
- 초기단계에서 자세한 사항을 너무 많이 고려하게 되면,
전체적인 구조가 비효율적으로 될 수 있고, 중요한 사항을 고려하지 못하는 경우가 발생
- 중요한 것을 파악하기 위해 추상적으로 생각할 필요
⑤ 재귀적인 형태가 있는지 확인한다.(반복 있는지)
- 문제 내에 있는 문제 자체의 형태가 문제 내에 존재하는지 파악
- 재귀적으로 해결하였을 때 알고리즘의 성능이 어떻게 될 지 미리 파악한다.
- 일반적으로 재귀적인 접근이 알고리즘을 간단히 만들 수 있지만, 성능이 나쁠 수 있다.
⑥ 병렬적으로 처리 가능한 부분을 확인한다.
- 동시에 수행할 수 있는 해결방안의 부분들을 파악한다.
- 어떻게 동시처리가 문제를 해결할 수 있는 설명한다.
- 문제를 해결하는데 동시처리가 적당한 방법인지 평가한다.
⑦ 개발된 소프트웨어가 많은 사용자들이 여러 번 오랜 기간 사용할 가능성 고려
- 많은 사람이 많은 횟수의 사용을 할 수 있으므로,
설계단계의 작은 기능향상이 결과적으로 큰 효율성 증대를 가져올 수 있다.
- 혼자 사용하는 것이 아니므로, 타인의 관점에서 설계를 해야 유용한 소프트웨어가 된다.
⑧ 개발된 소프트웨어는 지속적으로 변경 또는 업그레이드된다는 것을 고려
- 사용자의 의견 또는 오류발견에 의해 소프트웨어는 변경될 수 있다.
- 처음 소프트웨어 설계 시 수정이 용이하도록 설계하는 것이 중요하다.
- 쉬운 수정이 소프트웨어 운영을 효과적으로 할 수 있다.
⑨ 개발된 소프트웨어는 다른 소프트웨어를 개발할 때 재사용 될 수 있다는 것을 고려
- 많은 소프트웨어공학자들은 소프트웨어의 재사용성에 대해 연구를 하고 있다.
- 특정 목적을 위해 개발된 소프트웨어는 내부에 많은 절차를 갖고 있다.
- 많은 절차는 특정 목적의 소프트웨어에만 사용되지 않고,
다른 목적의 소프트웨어에도 사용될 수 있다.
- 소프트웨어의 기능 구현 가능한 이미 만들어진 절차가 있는지를 확인해 볼 필요가 있다.
- 새로 만들어진 절차가 다른 목적의 소프트웨어에도 사용될 수 있도록,
단순, 명료하게 만들어지도록 설계하는 것이 좋다.

3. 컴퓨터
1. 컴퓨터의 특징
- 컴퓨터 : 일련의 논리연산 , 산술적인 연산을 수행하는 자동장치
… 프로그램에 의해 이러한 작업을 수행하며, 프로그램을 변경하여
다양한 목적의 작업을 수행할 수 있는 범용성을 갖고 있는 장치다.
… 하드웨어 : 컴퓨터시스템의 물리적인 장치
- 입력장치 : 키보드 , 마우스 , 터치스크린 / 출력장치 : 모니터
- 메인장치 : 중앙처리장치 (CPU), 그래픽처리장치 (GPU), 주기억장치, 주기판,
전원공급장치 등
- 저장장치 : 하드디스크 , usb, CD, DVD 등
- 그 외 : 프린터 연결장치, 인터넷 연결장치, 오디오& 비디오 연결장치 등
… 소프트웨어 : 컴퓨터가 수행해야 할 명령을 지시하는 프로그램
- 프로그램, 라이브러리, 데이터들 포괄적으로 말함. 운영체제와 응용프로그램으로 구분
- 운영체제(OS) : 소프트웨어는 컴퓨터의 하드웨어 상에서 동작하게 되는데,
중간에 연결해 주는 기능을 수행
… 종류: 마이크로소프트사의 windows, unix, linux, mac os 등
… 스마트폰 운영체제 : android, ios, windows mobile 등
- 응용프로그램 : 운영체제 이외의 소프트웨어
… 한글, MS word, 인터넷브라우저나 스마트폰의 앱
… 컴퓨터 시스템의 계층 : 하드웨어 <운영체제<응용프로그램 <통신

2. 컴퓨터의 역사
- Abacus(B.C 2세기 ) : 주판과 유사한 형태, 유럽 ·중국 ·러시아 지역에서 사용
- Blaise Pascal(1642) : 더하기 ·빼기 ·곱하기 ·나누기를 할 수 있는 기계적 장치
- 알란 튜링 : 튜링머신 (1936) - 추상적인 기계로 현대 컴퓨터의 원형(수학적 모델 ) 고안
: 인공지능테스트 고안
- MarkⅠ (1944), ENIAC(1946) : 튜링이 정립한 컴퓨터의 개념이 이어져 내려옴.
- UNIVACⅠ(1951) : 최초의 상업용 컴퓨터

3. 컴퓨터의 특징
① 빠른 처리속도
- 일반적으로 인간은 복잡한 연산을 수행하는데 컴퓨터보다 더 빨리 할 수 없다.
- 처리시간이 1 nano second걸린다는 뜻은 초당 109개 처리
② 정확한 처리
- 컴퓨터는 프로그램에 의해 작동되므로, 어떠한 입력이 있더라고 정확한 결과를 만든다.
- 그러나 쓰레기가 들어오면, 쓰레기가 만들어 진다.(garbage in, garbage out !)
③ 큰 저장용량
- 컴퓨터는 합당한 형식으로 대규모의 데이터를 저장할 수 있다.
- 테라 바이트- 10의 12승 바이트
- 데이터 센터
④ 범용성
- 컴퓨터를 완전히 다른 용도로 동시에 사용할 수 있다.
⑤ 신뢰성
- 컴퓨터는 휴식이나 오류 없이 얼마든지 오랜 시간 동안 작업할 수 있다.
- 소프트웨어의 오류가 없는 한 항상 동일한 작업을 수행한다.
⑥ 상호연결성
- 컴퓨터는 서로 커뮤니케이션할 수 있는 능력이 있다.
⑦ 프로그램에 의해 동작
- 스스로 동작할 수 없다.(반드시 소프트웨어에 의해 가동)
- AI의 학습도 프로그램에 의해 진행

4. 소프트웨어
- 소프트웨어 : 시스템소프트웨어(운영체제 ), 응용프로그램
… 운영체제 : 하드웨어와 소프트웨어의 운영을 담당하여
컴퓨터의 동작을 관장하는 시스템 소프트웨어
… 응용프로그램 : 일반적으로 컴퓨터를 사용하면서 구동하는 프로그램들
(예: 크롬, 엑셀, 파이썬 IDLE, 스마트폰의 앱 등)
- Windows의 기능 : 윈도우 탐색기(파일 탐색, 저장 , 복사 , 삭제, 크기 확인),
제어판(시스템 설정), 장치 및 프린터 관리, 기본 프로그램
- 프로그래밍 언어 : 응용프로그램은 프로그래밍 과정을 거쳐 생성,
프로그래밍을 위해 다양한 언어 개발
… 컴파일 필요한 언어 : C, C++, Fotran 등
… 컴파일 필요 X : JavaScript, basic, python 등 (인터프리터에 의해 수행)
… 마크업 언어 : HTML (웹 브라우저 프로그램에 활용)

5. 유한상태기계
- 유한상태기계 :  컴퓨터가 프로그램을 수행하는 작동원리를 묘사하는 수학적인 모델
… = 유한 오토마타(finite automata)
… 유한상태기계의 구성 요소
- 입력데이터를 기록한 테이프, 테이프 리더, 기계의 상태를 저장하는 장치
… 기계가 최초 가동될 때 하나의 초기 상태를 갖는다.
… 기계가 가질 수 있는 상태의 개수는 유한하다.
… 현 상태 : 기계는 한순간에는 하나의 상태를 갖는다.
… 전이 : 하나의 입력에 의해 현재의 상태에서 다음의 상태로 바뀐다.
… 새로운 상태 = f(현재 상태, 입력 정보 ), f는 함수
- 윷놀이 ; 말의 새로운 위치 = f(말의 현재 위치, 던져진 네 개의 윷의 밑면의 개수)
… 종료 상태 : 말이 시작점으로 돌아온 상태
… 입력이 종료될 때 기계가 종료상태가 된다면
입력이 제대로 인식되었다 또는 받아들여졌다고 한다. – 복수개의 종료상태 가능
… 상태전이도로 기계의 동작을 표현한다.
… 유한상태기계의 동작
- 현재 상태 11에서 입력이 1이 들어오면 기계의 상태가 3으로 바뀐다.
- 3= f(11,1) (3은 오른쪽 상태저장장치, 11은 왼쪽 그림 상태저장장치, 1은 왼쪽 입력)
- 입력 데이터는 우측으로 한 칸 이동한다.

… 유한상태기계의 예
- 주어진 상황(입력, 이벤트, 조건)에 따라 미리 정의된 일련의 동작을 하는 기계에서
관찰 가능
- 자동판매기 : 정확한 금액이 투입되고, 사용자가 선택한 입력에 대해 물건이 낙하
또는 입구가 열린다.
- 은행현금기계(ATM) : 사용자의 선택에 따라 정해진 동작을 수행한다.
- 엘리베이터 : 사용자가 해당 층을 선택하면, 해당 층으로 이동.
… 중간에 방향이 맞는 승객이 외부에서 엘리베이터를 호출하면 동승시킨다.
- 교차로 신호등 : 미리 정해진 순서와 시간 간격 동안 신호등이 점멸한다.(ppt3 69)
- 이외 : 카운터 , 에어컨의 온도조절장치 , 폰뱅킹과 같은 ARS(ppt3 68)
… 상태전이도 (ppt3 68)
- 4자리 수 비밀번호 확인 (ppt3 70)
- 부호 없는 수를 인식하는 기계(ppt3 71)
- 프로그램의 변수를 인식하는 기계(ppt3 72)
- 윷놀이의 상태전이도(ppt3 73)
- [연습문제1] 알파벳 {a,b}, a의 개수가 짝수개인 문자열을 인식하는 기계의 동작
aabaa는 O, ababa는 X
- [연습문제2] - 알파벳 {a,b}, a의 개수가 3의 배수개인 문자열을 인식하는 기계 동작
aabaaaa O, abab X (ppt 75~77 참고)
… 이 개념은 기계제어장치, 언어의 어휘분석 등, 여러 공학 분야에서 활용된다.
… 실제의 컴파일러는 유한상태기계 이상의 능력을 갖고 있다.
- 유한상태기계 보다 강력한 능력을 갖고 있는 추상적인 기계
: 푸시다운 오토마타, 튜링 머신(가장 강력한 능력 가짐)

4. 알고리즘

1. 알고리즘
- 알고리즘 : 문제를 해결할 수 있는 잘 정의된 유한시간 내에 종료되는 계산적인 절차
… 잘 정의된 : 누구든지 정확하게 이해할 수 있을 정도로 기술되어야 한다.
… 유한시간 내에 종료: 무한시간의 반대 개념
… 계산적인 절차: 계산적으로 수행될 수 있어야 한다.
- 단어의 기원 : 페르시아의 수학자, 천문학자, 지리학자인 al-khwarizmi 의 성을 따서 만듦.
- 또 다른 정의 : 입력을 받아서 출력으로 전환시켜주는 일련의 계산절차
- 알고리즘은 프로그램의 엔진에 해당하는 중요한 절차이다.
… 프로그램 작성 시 가장 중요한 부분 = 알고리즘 설계

2, 문제를 해결하는 알고리즘이 존재하는 문제의 예


- 두 자연수의 최대공약수 , 최소공배수 구하기
… 소인수분해 방법 : ! " # ! × ! × ! × % # !% × % , & ' # ! × ! × ! × ! # !"
… 최대공약수 = ! min + %, "- × % min + &, .- # ! % × % . # /
max +% ," - max +& ,. -
… 최소공배수= ! ×% # !" × % & # "/
… 유클리드 알고리즘 : 두 수 a, b의 최대공약수를 GCD(a,b)라 하면,
a>b인 경우, GCD(a,b)=GCD(a-b, b),
a<b인 경우, GCD(a,b)=GCD(a,b-a), GCD(a,a)=a
성질을 이용하여 두 수의 최대공약수를 구할 수 있다.
- 예시) GCD(24,16) = GCD(8,16) = GCD(8,8) = 8
- 최단거리 구하는 문제 , 화랑감시 문제 , 선분교차 확인 문제, 미로탐색 문제 등
- 데이터 크기가 증가하는 순서로 정리 – 정렬알고리즘
- 라면류 조리하는 알고리즘
3. 알고리즘의 표현 방법
① 자연어(natural language) : 사람이 사용하는 언어를 이용
- 단어의 이해가 서로 다를 경우 의미가 정확히 전달될 수 없다.
- 절차가 긴 알고리즘인 경우 많은 문장이 필요하다.
- 복잡한 알고리즘 표현방법으로는 X ( 한번 읽어서 쉽게 이해하기 어렵다.)
- 최대공약수 구하는 유클리드 알고리즘(ppt4 5) - 글로 길게 설명
- 배열에 저장된 10개의 수 중 최대값 찾기(ppt4 6)
② 의사코드(pseudocode)
- 자연어로 표현한 것보다는 구조를 갖고 있다.
- 프로그램보다는 추상적인 방법 -> 보다 정확한 이해를 도와줌.
- 최대공약수 구하는 유클리드 알고리즘(ppt4 8) - 단계 적어놈
- 배열에 저장된 10개의 수 중 최대값 찾기(ppt4 9~10)
- 작년도 평균 월매출액(ppt4 20)
③ 흐름도(flowchart)
- 작업들의 연관 관계와 선후 관계를 시각적으로 보여 줌
- 작업의 순서를 나타냄 -> 전체 작업을 쉽게 이해할 수 있다.
- 최대공약수 구하는 유클리드 알고리즘(ppt4 13)
- 배열에 저장된 10개의 수 중 최대값 찾기(ppt4 14)
- 수학적 문제가 아닌 경우 흐름도(ppt4 17)
- 작년도 평균 월매출액(ppt4 20)
④ 프로그래밍 언어
- 컴퓨터로 수행할 수 있는 프로그램으로 알고리즘을 표현
- 최대공약수 구하는 유클리드 알고리즘(ppt4 15) - 파이썬
- 배열에 저장된 10개의 수 중 최대값 찾기(ppt4 16)

4. 의사코드
- 프로그램 작성 단계
문제의 이해 -> 문제해결 알고리즘 설계 -> 프로그램 코딩, 프로그램 테스트 ->
-> 프로그램 수정 -> 프로그램 활용
- 의사코드 : 수행하는 작업들을 프로그래밍 언어와 유사한 방법으로 나타낸 것
… 의사(疑似) : 실제와 비슷하다 + pseudo : 허위의, 가짜의, 모조의
-> 의사코드는 실제와 비슷한, 진짜는 아닌 코드
… 알고리즘의 이해를 쉽게 하기 위한, 단순하면서도 프로그램 코드와 유사한 형식
… 우리가 보통 사용하는 프로그래밍 언어의 형식과 유사하게 작성
… 프로그램 작성의 직전단계
… 의사코드에 대한 표준은 존재X
… 적당한 들여쓰기를 사용
… 실제 프로그램의 자세한 사항은 생략
… 의사코드 표시 방법
① 들여쓰기 : 적당한 들여쓰기를 하여, 알고리즘의 구조를 쉽게 파악할 수 있도록 구성
② 수학적인 표현 : 수학적인 의미가 정확한 내용을 수학적인 표현으로 기술할 수 있다.
ex. for 1≤a≤9 라는 표현이 가능하다.
③ 단순한 표현 : a와 b의 값을 서로 교환하는 작업 = swap(a, b) 또는 exchange(a,b)
④ 배열의 인덱스 : 배열의 인덱스를 사용하는데 특정한 제한X
- 1 또는 다른 자연수부터 시작하는 것으로 설정하여도 무방하다.
⑤ 변수 선언 - ‘number a’라는 방식으로 변수를 정의해도 무방
- 정수인지 실수인지 구분할 필요가 없을 경우는 일반적으로 수라는 표현으로 충분
⑥ 변수에 값 저장 - a=3, a:=3, a←3, a=b+c 와 같은 방법을 사용할 수 있다.
⑦ 반복 또는 조건이 적용되는 영역 : 중괄호 , [영역]으로 나타낼 수 있음
- if ~ fi, for ~ end for, while ~ end while 등 반복, 조건을 나타내는 키워드가
적용되는 끝을 명시적으로 표시 가능
… 의사코드로 프로그램의 5가지 기능 표현 방법
① 입력 : read, input, get 등의 명령문을 이용하여 입력 변수를 나타냄 ex. read A
② 출력 : write, output, put, print 등의 명령문을 이용하여 출력 변수를 나타냄
ex. wirte A
③ 연산 : 변수에 값을 지정하는 방식으로 연산을 나타냄 ex. a=b+c
④ 선택 – 조건부 수행 : if, else if, else 등을 조합하여 선택의 조건과
조건부로 수행될 영역을 나타냄.
ex. 입력으로 학년의 정보를 받아, 적당한 출력을 만드는 의사코드(ppt4 25)
⑤ 반복 : while, for, repeat 명령문을 이용하여 표현함.
ex. 알고리즘 입력 정수들의 합(ppt4 26)
… 예시
- 내일 할 일을 결정하는 알고리즘의 의사코드(ppt4 22)
- 1부터 100까지의 자연수를 더하는 의사코드(ppt4 22)
- 알고리즘 배열의 합(ppt4 27)
- 1부터 100까지의 합을 구하는 의사코드 (ppt4 27)
- 두 정수 중 큰 수를 찾는다.(ppt4 28)
- 1과 자신의 수는 제외한 자연수의 약수를 출력한다.(ppt4 28)
- 1000보다 작은 3의 지수값 중 최대값 찾기(ppt4 29)
- 섭씨온도와 화씨온도 변환(ppt4 29)
- 숫자 구분 알고리즘(ppt4 30)
- 1부터 100까지의 5의 배수들의 합 구하는 알고리즘(ppt4 30)
- 알고리즘 출력(ppt4 30)

5. 흐름도
- 흐름도 : 어떤 문제를 해결하는데 필요한 작업들을 도형들의 관계로 표현
… 도형들의 관계가 논리적인 흐름을 나타낸다.
… 작업들의 연관 관계와 선후 관계를 시각적으로 보여줌
… 터미널 심벌 : 흐름도의 시작과 끝을 나타내는 기호
- 모서리가 원형인 사각형으로 표시한다.
- 시작과 종료로 표시한다.
… 입출력 심벌 : 데이터의 입출력 작업 표시
- 평행사변형으로 표시
… 프로세스 심벌 : 연산 명령문 등 처리해야 할 작업 내용
- 수학적인 연산 또는 데이터 처리를 표시한다.
- 직사각형으로 표시
… 판단 심벌 : 판단을 나타낸다
- 조건을 판단하여 결과는 예/아니오 또는 참/거짓이 된다.
- 다이아몬드로 표시한다.
… 연결 심벌 : 페이지 내 , 외의 연결을 나타낸다.
- 페이지 내의 연결심벌 : 페이지 내의 위치로 이동하는 것을 표시한다.(원으로 표시)
- 페이지 외의 연결심벌 : 페이지 외부의 위치로 이동(야구 홈플레이트 도형으로 표시)
… 미리 정의된 프로세스 심벌 : 모듈, 함수, 메소드, 하위절차
… 흐름심벌 : 연결 흐름, 작업의 선후관계를 표시
… 준비 심벌 : 변수의 초기화 표시 (육각형으로 표시)
… 문서출력 심벌 : 종이로 출력하는 내용을 표시
… 데이터베이스 심벌 : 데이터의 저장소, 즉 데이터베이스를 표시(원통형으로 표시 )
… 흐름도 작성 원칙 : 좌 → 우, 상→하 / 하나의 도형은 하나의 작업을 나타낸다
… 흐름도의 구조
– 기본구조 : 순서 표시
- 선택의 형태, 반복의 형태
- 순서, 선택, 반복의 형태를 적당히 활용하여 모든 흐름도의 구조를 완성
… 순서를 나타내는 방법 : 작업들을 하나의 순서로 나열
- 프로그램의 모든 작업은 순차적으로 진행(병렬처리인 경우는 예외).
- 작업 A, B, C가 순서대로 진행하는 흐름도
: B 는 A가 종료된 후 시작. 작업 A, B, C는 모두 종료되어야 함. B에서 중단될 수 X
… 선택을 나타내는 방법 : 단일대안 , 이중대안 , 삼중대안
… case 형태의 흐름도(ppt4 41)
- 변수의 값에 따라 작업이 결정됨
- 변수는 정수
… 반복(loop, iteration, repetition)을 나타내는 방법
- 정해진 숫자만큼 또는 어떤 조건을 만족하는 동안 동일한 작업을 반복하는 형태
- 판단과 결합하여 사용
- 1부터 100까지의 자연수를 더하는 알고리즘의 흐름도(ppt4 42)
… 예시
- 두 정수 중 큰 수를 찾는다(ppt4 45)
- 1과 자산의 수는 제외한 자연수의 약수를 출력한다(ppt4 46)
- 1000보다 작은 3의 지수값 중 최대값 찾기(ppt4 47)
- 섭씨온도와 화씨온도 변환(ppt4 48)
- 숫자 구분 알고리즘(ppt4 49)
- 1부터 100까지의 5의 배수들의 합 구하는 알고리즘(ppt4 50)
- 알고리즘 출력(ppt4 51)
6. 프로그램 작성 단계
① 문제가 이해가 될 때까지 적어도 3회 읽는다.
② 3세트 이상의 샘플 데이터를 이용하여 손으로 문제를 해결해 본다.
- 특정한 데이터에 대해서만 프로그램이 정상적으로 동작할 수 있다 .
- 다양한 데이터를 통해 일반적인 경우의 프로그램 동작을 이해할 수 있다 .
- 수작업을 통해 문제가 어떠한 방식으로 해결되는지를 이해할 수 있다.
③ 문제를 해결하는 단계를 단순화 , 최적화 시킨다.
- 불필요한 부분이 있는지 확인한다.
- 중복된 작업, 패턴이 수행되는지 확인한다 .
- 더 효과적인 방법을 고안한다.
④ 의사코드 , 흐름도를 작성한다.
- 의사코드, 흐름도로 설계된 내용을 정리한다.
- 파악하지 못한 반복처리가 가능한 부분, 불필요하게 중복되어 표현된 부분 확인 가능
- 논리적인 절차에 집중한다 .
⑤ 의사코드 , 흐름도를 실제 코드로 바꾸고 코드를 점검한다.
- 실제 코드를 바꿀 때 더 효과적인 방법을 고안할 수도 있다.
- 의사코드, 흐름도가 의미하는 논리적인 구조를 충실히 반영하여야 한다 .
⑥ 코드를 단순화, 최적화시킨다.
- 단순화된 코드가 프로그램의 신뢰성을 증가시킨다.
- 최적화된 코드는 수행시간을 줄여 준다.
- 불필요한 변수, 함수 등을 제거하여 가독성을 향상시키도록 한다 .
- 특정한 코드부분이 반복적으로 나타날 경우 제거 방안 모색
⑦ 디버그 수행
- 개발도구에서 디버깅을 할 수 있다.
- 단순오류보다 논리오류를 찾기 어려움 -> 논리적인 오류를 찾기 위해 주의 기울이기
⑧ 주석을 프로그램에 추가한다 .
- 프로그램이 완성되면 프로그램을 설명하는 주석을 추가한다.
- 주석은 추후 프로그램의 수정을 용이하게 해준다. -> 상세한 주석이 필요하다 .
- 코드의 목적이 무엇인지, 무슨 작업을 하는 것인지?
⑨ 다른 사람들로부터 코드 점검을 받는다.
- 다른 사람으로부터 피드백을 받는다.
- 문제를 해결하는 또 다른 효과적인 프로그램 방식을 제안 받을 수 있다.
- 자신의 방식을 고수하면, 비효율적인 측면을 찾을 수가 없다.

5. 프로그램

1. 프로그램
- 컴퓨터를 동작하게 하는 것 = 소프트웨어
- 소프트웨어는 프로그램과 프로그램이 필요로 하는 데이터,
미리 만들어 놓은 프로그램에 해당하는 라이브러리들의 집합체
… 이 중에서 가장 중요한 역할을 하는 것이 프로그램
- 프로그램 : 알고리즘을 포함하여 컴퓨터에서 가동할 수 있는 명령어들을 이용하여
수행하고자 하는 작업들을 정의한 것
- 컴퓨터 언어 – 일반적인 프로그래밍 언어 : C, C++, Java, 파이썬
- 마크업 언어 ; HTML, SGML(웹 브라우저 홈페이지 제작에 이용)
- 그 외 : 데이터베이스 질의어인 sql( structed query language) 언어
… html 파일과 브라우저의 관계 (브라우저는 프로그래밍 언어로 만듦 )
: 서버 → HTML 파일(입력, input) → 브라우저 → 디스플레이(출력, output)
- 프로그래밍
… 좁은 의미의 프로그래밍
- 수행해야 할 작업을 프로그래밍 언어의 일련의 명령어로 구성하는 작업
- 알고리즘 → 프로그래밍 언어의 일련의 명령문
… 넓은 의미의 프로그래밍
- 프로그램 개발의 전체 과정, 문제 이해 → 알고리즘 설계 → 명령문 작성
→ 프로그램의 분석
- 1980년대 초까지 사용된 펀치카드 : 카드 한 장이 프로그램 1줄
- 프로그래밍 언어의 특징
… 대부분 영어를 기반으로 구성되어 있다.
… 문법적인 구조를 갖는다
… 어휘 , 구문 – 언어의 형태
… 의미를 갖는다 - 언어의 의미
… 항상 동일한 의미로 해석된다.
… 프로그램을 기계어로 번역하는 컴파일러 (compiler) 존재
… 인터프리터 언어 – 컴파일러 없이 바로 수행

2. 프로그램의 기능
① 입력 : 데이터를 키보드를 통해 받아들이거나 , 파일에서 읽어 들인다 .(예시 –ppt5 22)
- 키보드, 터치스크린, 마우스, 파일 등으로 부터 입력 데이터를 받는 기능
- read, get, input, cin 등의 명령어를 사용한다
② 출력 :  문자, 이미지를 화면에 보이게 하거나, 파일에 쓴다.(예시–ppt5 22)
- 스크린, 파일, 종이 등으로 데이터를 출력하는 기능
- write, put, print, cout 등의 명령어를 사용한다.
③ 연산 (예시 –ppt5 23)
- 더하기, 빼기, 곱하기, 나누기, 나머지연산, 논리연산 등의 연산을 수행하는 기능
- +, -, *, /, %, >, <, =, == 등의 연산자를 사용한다.
④ 선택 -조건부 수행(예시– ppt5 24~30)
- 조건을 판단하여 특정 작업을 수행하는 기능
- if, else 등의 명령어를 사용한다.
⑤ 반복 (예시 –ppt5 31~32)
- 동일한 작업을 2회 이상 하는 기능
- for, while, repeat, do 등의 명령어를 사용한다.
- 입력/출력 프로그램 예 : 입력으로 변수에 값 저장, 간단한 연산 수행, 형식 맞게 출력
프로그램 해석 일반적인 프로그램 형식 화면에 보이는 내용
입력: salary 값을 받아들인다. input salary
200
연산: salary 값에 0.1을 곱해 tax에 저장 tax = salary * 0.1
세금: 20원
출력: 문자열과 tax를 출력 print “세금 :”tax“원 ”

- 연산 프로그램 예 - 선택 – 조건부 수행 프로그램 예 - 반복 예


프로그램 출력 print(“type two numbers : sum=0
a=1 ”) for I in range(1,11):
type two numbers 55
b=2 a=input(“1st number : ”) sum += I
:
c=3 7 b=input(“2nd number : ”) print(sum)
1st number : 3
d=a+b*c if a>b:
2nd number : 5
print(d) print(a) - 배열 예
5
else a=[3, “Tom”, 7] 3
print(b) print(a[0]) T o
- 배열(리스트) : 공통의 성질을 갖는 변수가 여러 개일 때 하나의 변수명을 print(a[1]) m
정하고, 위치를 나타내는 인덱스를 이용해서 변수를 나타내는 자료구조 print(a[2]) 7

3. 변수
- 변수 : 하나의 값을 저장하는 저장 위치의 이름 - 물건을 저장하는 하나의 상자와 같다
… 변수명: 영문 알파벳과 숫자로 구성.
- 변수명의 첫 문자는 영문 알파벳. 언어에 따라 첫 문자가 _가 될 수도 있다.
ex. a, b123, c_12
… 저장하는 값은 숫자, 문자, 문자열(string) 등이 될 수 있다.
… 변수명과 변수가 갖고 있는 값은 다르다.
… 하나의 변수는 항상 하나의 값만 가질 수 있다
… 변수에 값을 저장하는 방법 : 배정 연산자를 사용
- a=1 : 1의 값을 a에 저장 / c=a+b : a와 b의 값을 더한 후 c에 저장
- a=1 지정한 후 a=2를 수행하면 1의 값은 2의 값으로 변경 , 전에 있던 값은 지워진다 .
- a=1, b=2인 경우, 두 변수의 값을 맞교환 하는 방법
: ① 새로운 변수 temp 이용 ② temp=a ③ a=b ④ b=temp

4. 함수
- 함수 형태로 기능을 만들면 다양한 입력에 대해 공통적인 작업을 수행한다.
- 중심위치와 가로, 세로 길이로 다양한 형태 생성 가능 – 함수 기능
- 반복적으로 사용되는 절차를 하나의 단위로 만들어 매개변수의 값만 바꾸면서 다양한 결과
를 만들 수 있다.
- 큰 프로그램은 내부에 많은 수의 함수들을 갖고 있는데, 많이 사용하는 함수들은 미리 작성
해서 사용
- 예시 (ppt5 37~43)
- 함수의 기능
… 하나의 큰 프로그램은 많은 수의 함수들로 구성된다.
… 다양한 함수들이 이미 만들어져 있다.
… 라이브러리(library): 함수들의 집합
- 그래픽 라이브러리, 통계분석 라이브러리, 수학연산 라이브러리
- 많은 프로그램들은 다양한 라이브러리를 연결하여 구축할 수 있다.

5, 컴파일러
- 컴파일러 : 소스프로그램을 컴퓨터에서 수행가능 하도록 기계어로 바꾸어 주는 번역기
(소프트웨어) - C 컴파일러, C++ 컴파일러 등
… compile과정 유무에 따른 프로그래밍 언어 분류
- 컴파일러에 의해 컴파일 되는 언어: C, C++,COBOL, FORTRAN, Java
: 번역된 후 수행된다.
… 인터프리터에 의해 수행되는 언어: python, basic, JavaScript, MATLAB, PHP, Lisp
: 번역과정 없이 바로 수행된다.
… 컴파일러는 사람이 사용하는 프로그래밍 언어로 작성된 프로그램을
기계가 인식하는 형식으로 바꾼다(번역한다).
… 컴파일러는 작성된 프로그램을 확인하여 오류를 확인한다. (C++)
-> 오류가 없을 경우 수행모듈을 생성한다.
- 어휘의 오류 : 어휘분석 단계에서 오류 확인 ex. iny I=2; (iny → int)
- 구문의 오류 : 구문분석 단계에서 오류 확인 ex. int float=2; (int 후에 float X)
- 파이썬은 컴파일러가 아닌 인터프리터(interpreter)가 프로그램의 적합성을 검사
… 소스프로그램이 컴파일러를 거쳐 수행되기까지의 단계
- 소스프로그램 → 컴파일러 → 목적프로그램(기계언어) → 링커 → 로더 →
→ 수행가능 프로그램 → 수행

6. 파이썬

1. 파이썬 소개
- 파이썬을 배우는 이유
① 컴퓨터를 동작시키는 언어를 배워 CT를 익힌다. (절차적으로 진행하는 작업을 이해)
② 컴퓨터가 할 수 있는 일과 할 수 없는 일을 알게 된다. (컴퓨터의 능력과 한계를 이해)
③ 작은 프로그램을 완성할 수 있는 능력을 키운다.
- 작은 프로그램도 기본적인 기능 필요
- 대규모 프로그램도 결국 작은 프로그램들의 결합으로 완성
④ 다른 프로그래밍 언어를 배울 수 있는 토대를 갖는다.
- 하나의 프로그래밍 언어를 익히면 다른 프로그래밍 언어를 쉽게 배울 수 있다.
- 프로그래밍 언어들은 서로 유사한 부분을 공유한다. 예) J AVA, C++
⑤ 작성된 프로그램 코드를 읽는 능력을 키운다.
- 다른 사람의 프로그램을 이해하여 본인의 작업에 도움
- 소프트웨어의 동작원리를 파악하여 개선할 점을 제시할 수 있다.
- 파이썬
… 1991년 처음 만들어 짐. 인터프리터 언어의 일종, High-level 언어
… 객체 지향 개념을 포함, 단순한 형식과 쉬운 가독성을 목표
… 오픈소스 소프트웨어로 비영리 단체에 의해 운영(무료 사용)
- 인터프리터 언어
… 컴파일 과정 없이 실행되는 컴퓨터 언어( Python, MAT LAB, BASIC), 언어가 단순하다
… 인터프리터 : 인터프리터 언어로 작성된 프로그램을 수행하는 프로그램
(IDLE: 파이썬 이용을 위한 프로그램)
- Shell : OS 와 연결할 수 있는 user interface, 명령어를 주면 값을 반환
… IDLE은 shell window와 editor window 를 갖는다.
… >>> : prompt(입력대기 상태 )

2. 변수에 값 저장
- 변수 : 프로그래머가 생성할 수 있는 식별자(identifier)의 일종
… 변수명 = 저장할 값 or 변수명 ex. a=53, word=“school”, cost=100, total=sum+diff
… 변수가 갖고 있는 값은 연산에 사용 가능
… e=[1, “bus”, 5.9] → 세 개의 데이터를 리스트 데이터로 저장, 출력도 list 형식으로
(예: print(e[2]) → 5.9)
… 프로그램은 좌에서 우로 읽는다, 위에서 아래로 줄 단위로 진행하면서 수행된다.
- 인터프리터 구성 방법
… identifier : 변수 이름이나 함수 이름 - 알파벳 a-z, A-Z, _로 시작
… 이후에는 알파벳 (대소문자), 숫자(0-9)가 올 수 있다 . 대소문자 구분, 특수문자 사용 X
- 예약어 : 특정한 기능을 갖고 있어 식별자로 사용할 수 없음 . ex. and, del, from, not 등

3. 입력, 출력
- input, print 사용 - input으로 받은 값은 문자로 바로 연산에 사용할 수 없다 .
… a=input(“Type any number”) → print(a+1) → 오류 발생 (a가 문자열로 인식됨 )
→ print(int(a)+1)
… int는 정수로 변환, 소수점 있는 숫자로 변환할 때는 float 사용
- 수학 연산자 : +(더하기), -(빼기 ), *(곱하기), /(나누기), %( 나머지연산 , 나머지는 양수),
//(몫 연산), ** : 제곱
- 배정 연산자 : 수학 연산자를 활용하여 배정문을 간단하게 표현
(=, +=, -=, *=, /=, %=, //=, *=)

4. 조건부 수행
- 조건부 수행 : 조건에 따라 수행해야 할 프로그램 부분이 달라지는 경우
… if(~이면), else(if, elif 조건에 해당하지 않으면), elif(복수개의 조건) 예약어 사용
… 들여쓰기가 다르게 되면 서로 짝이 안 되어 오류 발생
… else가 반드시 필요한 것은 아님.
… == : 양쪽이 같은 값을 갖는지 판단하는 연산자
… != : not equal, 양쪽 값이 다른지 판단하는 연산자
… 논리 연산자 : and, or, not - 우선 순위 : and > or
… 중첩된 조건부 수행 프로그램에서는 대응하는 if 구조끼리 들여쓰기를 맞추어야 한다.
… True와 False는 예약어 , TRUE 는 예약어 X

You might also like