정보통신 - 문제해결과 프로그래밍
1. 문제의 이해와 분석
-
문제의 이해
(1) 문제: 생활 속에서 발생하는 해결해야 할 과제 또는 상황
(2) 문제 이해: 문제를 해결하기 위해 문제가 발생한 상황이나 해결하려는 것이 무엇인지 분석하는 과정
-
문제의 분석
(1) 문제 분석: 문제를 해결하기 위해 문제에서 요구하는 것이 무엇인지 분석하는 과정
(2) 문제 분석 요소
① 현재 상태: 문제가 발생한 최초의 상태, 주어진 자료와 조건, 준비 등을 이해
② 목표 상태: 문제가 바람직하게 해결되어야 할 상태로 해결하거나 구하고자 하는 것이 무엇인지를 이해하고, 해결 방법을 선택한 후 실행할 수 있는 상태
-
문제의 표현
(1) 문제를 이해하고 분석한 뒤 다양한 방법으로 표현해 보는 것도 문제 해결에 도움이 됨.
(2) 문제를 표현하는 다양한 방법
① 말과 글로 표현
② 표로 나타내기
③ 그림이나 그래프로 나타내기
2. 문제의 핵심 요소 추출
-
핵심 요소 추출
(1) 핵심 요소 추출: 문제 해결에 중요하고 필요한 부분만을 추출하여 문제의 핵심이 드러나게 하는 것
(2) 추상화: 문제를 해결하기 위해 문제를 작은 단위로 쪼개고, 이 중에서 문제 해결을 위해 필요한 핵심 요소를 선택하는 과정
(3) 추상화를 통해 문제는 간결해지고 이해하기도 쉽고, 문제 사례에 적용할 수 있는 규칙을 발견할 수도 있음.
(4) 문제 상황에서 제시된 조건과 정보를 자세히 관찰하고, 각 요소들 사이의 관계를 파악하면 문제 해결에 필요한 요소와 불필요한 요소를 분리할 수 있다.
(5) 추상화의 분류
① 상태의 추상화(자료 추상화): 문제의 자료를 추상화하는 것으로 각 대상의 핵심적인 특성이나 속성을 추출
② 동작의 추상화(기능 추상화): 자료를 바탕으로 변화하는 과정 또는 기능의 핵심을 추출
3. 알고리즘의 이해
-
알고리즘
(1) 알고리즘: 문제 해결을 위해 일련의 규칙에 따라 논리적인 순서로 설명하고 표현하는 방법 또는 절차
-
알고리즘 성립 조건
(1) 알고리즘은 입력과 출력, 명확성과 수행 가능성, 유한성의 조건이 필요
(2) 성립 조건
① 입력: 알고리즘은 문제 해결에 필요한 자료를 외부로부터 받아들일 수 있어야 함.
② 출력: 알고리즘은 문제 해결 절차에 따른 하나 이상의 결과를 출력해야 함.
③ 명확성: 알고리즘에서 각 단계의 명령은 모호하지 않고 명확해야 한다.
④ 유한성: 해당 알고리즘을 명령대로 수행하면 정해진 단계를 거쳐서 반드시 종료되어야 한다.
⑤ 수행 가능성: 알고리즘은 각 단계가 반드시 실행 가능한 것이어야 한다.
-
알고리즘의 중요성
(1) 알고리즘은 문제 해결 방법에 따라 비용, 시간, 결과 등이 다르므로 문제에 대해 논리적이고 정확한 알고리즘을 찾는 것이 중요함.
4. 알고리즘의 표현
-
문제 해결 방법의 탐색
(1) 문제를 해결하는 방법은 상황과 조건에 따라 다양할 수 있다.
(2) 다양한 문제 해결 방법
① 시행착오법: 한 가지 해결책을 시도해 보고 해결되지 않으면 차례로 다른 방법을 시도하는 방법
② 규칙 찾아내기: 문제의 조건을 충분히 분석하고 재조직하여 문제의 규칙이나 원리 관계성 등을 발견하여 문제를 해결하는 방법
③ 나누어 풀기: 작은 문제로 나눈 후 각각의 문제를 해결해 가면서 큰 문제를 해결하는 방법
④ 되추적 방법: 문제 해결의 진행이 불가능할 경우 이전에 수행했던 해결 방법으로 돌아가 다른 해결 방법을 찾는 방법
-
알고리즘의 표현
(1) 알고리즘은 글, 그림 등 다양한 방법으로 표현할 수 있음.
(2) 순서도: 미리 약속된 기호를 사용하여 순서대로 알고리즘을 표현한 것
5. 프로그래밍의 이해
-
프로그래밍
(1) 프로그램: 컴퓨터가 이해할 수 있는 언어로 만들어진 명령어들의 집합
(2) 프로그래밍: 문제 해결을 위해 명령어를 작성하는 과정
(3) 컴퓨팅 기기를 이용한 문제 해결 과정
① 문제 발견(사람): 일상생활 등에서 문제를 발견하는 과정
② 문제 분석(사람): 발견한 문제를 분석하여 해결 가능한 작은 단위로 나누고 추상화하는 과정
③ 알고리즘 설계(사람): 분석한 문제 중 기능을 추상화한 결과는 알고리즘이 되며, 자료를 추상화한 결과는 프로그램에 사용되는 변수 등이 됨. 프로그램의 전반적인 작동 과정을 설계하는 과정
④ 실행(사람 → 컴퓨터 → 컴퓨터): 설계된 알고리즘을 토대로 컴퓨팅 기기가 이해할 수 있는 명령어로 프로그램을 작성하고 컴퓨팅 기기가 이를 처리하고 실행하여 프로그램을 통해 문제를 해결하는 과정
⑤ 결과 분석: 실행되는 결과를 분석하여 오류를 수정하거나 이를 통해 문제를 해결하는 과정
-
프로그래밍 언어
(1) 사람과 컴퓨팅 시스템이 모두 읽을 수 있는 형식으로 표현되어야 하며 언어의 모호함과 논리적 모호함이 없도록 구성되어야 함.
(2) 프로그래밍 언어의 예: 엔트리, 스크래치, C 언어, 자바, 파이선 등
6. 입력과 출력
(1) 프로그램을 이용한 문제 해결 과정: 입력 → 처리 → 출력
(2) 입력: 처리해야 할 자료들을 외부 장치로 입력하는 것
① 키보드 문자 입력
② 마우스 클릭을 통한 입력
③ 마이크를 통한 소리 입력
④ 카메라를 통한 그림과 동영상 입력
⑤ 센서로 물체의 동작을 입력
(3) 출력: 입력 자료를 처리한 결과를 외부 장치로 보내는 것
① 모니터에 문자, 그림, 영상 출력
② 스피커나 이어폰을 통해 소리 출력
③ 프린터에서 문서를 출력
④ 물체가 명령에 따라 움직임
(4) 프로그램의 출력은 주로 모니터, 스피커, 혹은 하드웨어의 동작으로 출력 형태를 확인할 수 있다.
(5) 자료의 입력과 결과의 출력은 명확해야 함.
(6) 엔트리 입력 관련 블록의 예
7. 변수와 연산
(1) 변수: 프로그램이 실행되는 동안 자료를 처리하거나 저장하는데 사용되는 기억 장소
(2) 변수의 특징
① 변수에는 다양한 형태의 값을 지정할 수 있음.
② 변숫값은 프로그램이 실행되는 동안 계속해서 변할 수 있음.
③ 각 변수에는 이름을 붙일 수 있음.
④ 변수에 저장된 값을 이용하여 계산을 하거나 문자열끼리 묶을 수 있음.
(3) 변수와 초깃값: 초깃값은 프로그램이 시작될 때 처음 저장되는 값으로, 초깃값을 지정해 주면 프로그램이 계속 실행될 때 생길 수 있는 계산 오류를 막을 수 있음.
(4) 연산: 정해진 규칙에 따라 계산하는 것
(5) 연산의 종류
① 산술 연산: 숫자를 이용한 덧셈, 뺄셈, 곱셈, 나눗셈
② 비교 연산: 숫자나 변수 등의 요소를 서로 비교할 때 사용되며 참과 거짓으로 결과를 표현
③ 논리 연산: 여러 조건을 조합하여 복잡한 조건을 나타낼 때 사용되며 참과 거짓으로 결과를 표현
8. 제어구조
(1) 제어 구조: 프로그램이 실행 순서를 지시하는 데 사용하는 구조
(2) 제어 구조는 프로그램의 실행 순서에 다양한 변화를 줄 수 잇어 문제 해결 알고리즘의 중요한 요소로 활용됨.
(3) 제어 구조를 잘못 사용할 경우 프로그램 전체에 영향을 미칠 수 있기 때문에 제어 구조를 바르게 이해하고 용도에 맞게 사용해야 함.
(4) 제어 구조의 종류
① 순차 구조: 자료의 입력과 출력까지 명령의 순서에 따라 실행하는 구조. 프로그램의 기본적인 실행 방식
② 선택 구조: 주어진 조건에 따라 실행하는 내용이 서로 다른 구조. 다양한 연산자를 사용한 조건식을 제시할 수 있음.
③ 반복 구조: 주어진 조건을 만족하는 동안 일정 부분을 반복하여 실행. 같은 작업을 여러 번 수행해야 할 때 소스 코드를 간결하게 만들 수 있음.