|
* 교과서 필기, 문제풀이는 계속 업데이트 됩니다 *
p97 사고력 키우기
내가 생각하는 제목
예) 햇빛, 달빛 그리고 나 : 빨간색 빗금은 햇빛, 노란색 빗금은 달빛, 그것을 감상하는 나의 파란 눈동자를 의미한다.
기억의 조각 : 조각난 기억의 파편들을 억지로 붙여놓은 것을 표현한 것이다.
p101
문제 분석
예) 놀이 기구 안의 청룡열차를 탑승하기
: 놀이 기구 안의 청룡열차를 탑승하기 위해서는 우선 놀이 공원의 지도를 살펴보고
놀이 기구의 위치를 알아내야 한다.
다음에는 놀이 기구에 도착할 수 있는 여러 가지 길을 살펴본 후 가장 합리적인 길을 선택하면
마침내 놀이 기구의 탑승장에 도착할 수 있다.
이와 같이 현재 상태인 놀이 공원의 입구에서 시작하여
1단계 놀이 기구의 위치를 탐색하고,
2단계로 놀이 기구에 도착할 수 있는 경로를 선택하고,
3단계로 선택한 경로를 이용하여 놀이 기구를 찾아가면 목표 상태에 이르게 되어 문제가 해결된다.
p102
핵심 요소 : 문제에서 공통적인 부분이나 목표 상태에 도달하기 위해 해결의 방향을 제시하는
문제 해결의 중심이 되는 부분을 말한다.
- 문제를 해결하기 위해서는 문제 해결에 필요한 핵심 요소와 불필요한 요소를 파악한 후
불필요한 요소를 제거하여 단순화하는 과정이 필요하다.
p103
01 실생활에서 경험한 문제 상황을 생각하여 문제의 현재 상태와 목표 상태를 표현해 보자.
문제 상황 | 예) 아야! 오늘도 또 배가 아프네. 에휴.. 오늘도 또 지각이네 |
현재 상태 | 예) 복통이 발생한 상태 학교에 지각한 상태 |
목표 상태 | 예) 복통이 치료된 상태 학교에 지각하지 않고 등교한 상태 |
02 문제 상황을 해결하기 위해 필요한 자료를 다양한 방법으로 조사하고 수집해 보자.
수집한 자료 | 자료의 의미 |
예) 의학적 원인과 치료법 지식, 주변 유사 경험자의 의견, 인터넷 등에서 검색의 자료 등 기상 시간, 수면 시간, 수면의 질, 등교 준비 과정, 부모님 의견 등 | 예) 바이러스에 의한 감염, 다른 신체 기관의 이상으로 인한 복통 정신적 스트레스 등 기상 시간은 너무 늦은 시간은 아닌지, 너무 늦게 잠자리에 들지는 않았는지, 잠자는 동안 꿈을 꾸거나, 심하게 뒤척이진 않았는지, 등교 준비 과정에서 시간을 허비하진 않았는지, 부모님께서는 뭐라고 하시는지 등 |
03 수집된 자료로부터 핵심 요소를 추출하여 정리해 보자.
예) 친구들과의 관계에서 생긴 스트레스를 없애는 방법 찾기 학업 스트레스로 인한 불면증 때문에 수면 시간과 수면의 질이 나쁜 상태이므로 학업에 대한 스트레스를 줄이는 방법 찾기 |
p104
분할 정복(Divide and Conquer)은 여러 알고리즘의 기본이 되는 해결방법으로,
기본적으로는 엄청나게 크고 방대한 문제를 조금씩 조금씩 나눠가면서
용이하게 풀 수 있는 문제 단위로 나눈 다음
그것들을 다시 합쳐서 해결하자는 개념에서 출발하였다.
분할 : 문제를 더이상 분할할 수 없을 때까지 동일한 유형의 여러 하위 문제로 나눈다.
정복 : 가장 작은 단위의 하위 문제를 해결하여 정복한다.
p106 생활 속 문제를 이해하고 추상화하기
01 문제 이해하기
현재 상태 | 시티 투어 노선도를 만들려고 하는 상태 |
목표 상태 | 먹거리 위주의 시티 투어 노선도 제작 완료 상태 |
02 추상화하기
문제 분석 | ● 시티 투어의 주제를 먹거리로 지정, 먹거리를 세부적으로 육류와 해산물로 구분하고 다시 육류는 소고기, 돼지고기, 닭고기, 오리고기로 구분 ● 각 먹거리별 유명 맛집을 조사하고, 시티 투어 버스가 주차할 수 있는 곳인지 파악하여 음식점을 선정한다. ● 선정된 음식점을 중심으로 근처에 관광하거나 체험할 수 있는 곳을 파악하고, 관광이나 체험 활동을 확정한다. | |
핵심 요소 추출 (시티 투어 노선도) | ● 확정된 관광지(체험 활동지)와 음식점을 지도에 표시한다. 이때 관광지(체험 활동지)와 음식점을 다르게 표시한다. |
노선도 제작 | ● 지도에 표시된 것을 바탕으로 이동 노선과 시간표를 확정하여 노선도 제작을 완료한다. |
p109
입력이 0인 경우의 예
: 로또 번호 생성기 1~45 사이의 정수 중에서
6개의 정수값을 생성하는 알고리즘이 되며,
이 때 입력은 0개
p100 순서도에 사용되는 기호와 의미
p112
소수 : 1과 그 수 자신 이외의 자연수로는 나눌 수 없는 자연수
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53...
p113 탐구활동
■ 문제 상황
● 이런 늦잠을 잤네!! 어떡하지? ● 앗! 핸드폰을 집에 두고 왔네!! 어떡하지? ● 중간고사가 일주일 남았네!! 일주일동안 어떻게 공부해야 하는 건지 모르겠어. 어떡하지? |
■ 제어 구조를 활용하여 알고리즘으로 표현하기
구분 | 순차구조 | 순차 + 선택 구조 | 순차 + 선택 + 반복구조 |
알고리즘 표현 | ① 시험 과목을 시험치는 순서대로 나열한다. ② 시험 첫째 날 1교시 과목을 공부한다. ③ 시험 첫째 날 2교시 과목을 공부한다. | ① 시험 과목을 시험치는 순서대로 나열한다. ② 각 과목별 공부해야 할 양을 기록한다. ③ 시험 첫째 날 치는 정보, 수학, 과학 중에서 ④ 만약, 정보의 공부양이 가장 많다면 정보부터 공부한다. | ① 시험 과목을 시험 치는 순서대로 나열한다. ② 각 과목별 공부해야 할 양을 기록한다. ③ 만약, 아직 공부를 하지 않은 과목들 중에서 특정 과목의 공부양이 가장 많다면 그 과목 부터 공부한다. ④ 모든 과목의 공부가 끝날 때까지 ③의 과정을 반복한다. |
p114
합병 정렬 : 원소를 정확히 반으로 나누면서 정렬해 나가는 방식
(Merge Sort) (분할 정복 방법론을 사용)
처음에는 어떠한 것도 하지 않고 정확히 반씩 나누기만 합니다.
데이터가 8개 있을 때 정확히 반씩 나누게 됩니다.
원소가 하나 될 때까지 나눕니다.
예) 학교에서 시험을 봤다고 가정
시험을 본 학생을 중심으로 50점이 넘는 학생은
50점을 기준으로 50점이 넘는 학생은 오른쪽으로 가고,
50점이 안되는 학생은 왼쪽으로 보냅니다.
그러면 이들간의 그룹이 나눠지게 됩니다.
이후에, 50점이 넘는 학생들을 기준으로
70점 이상과 70점 이하로 나눕니다.
연산을 한 번 할때마다 비교하는 학생의 수가 반으로 줄어듭니다.
마찬가지로 25점을 기준으로 나눈다고 하면 ,
25점을 기준으로 이하인 학생과 이상인 학생으로
4그룹으로 나눠지게 됩니다.
p115
■ 효율성 판단
→ 시간 복잡도 : 얼마나 빠르게 결과를 출력?
→ 공간 복잡도 : 메모리를 얼마나 사용?
■ 알고리즘 표기법
→ 빅오 표기법 : 최악일 때의 성능을 판단,
"최악의 경우 이 정도 나오니 이것보단 더 나쁠수 없어" 로 평가하는 방법
→ 빅오메가 표기법 : 알고리즘이 최상일 때의 경우를 판단
이 보다 더 좋을수는 없어로 평가하는 방법
시간복잡도 O(N)
→ 데이터의 개수가 100개라면 연산을 100번 해야 한다.
데이터의 개수가 늘어나면서 횟수도 함께 늘어나게 된다.
1부터 10까지의 합을 구하는 알고리즘
N=10
sum=0
i sum
1 1
2 3
3 6
4 10
5 15
6 21
7 28
8 36
9 45
10 55
p116
알고리즘 1
1~10 9번 덧셈
1~100 99번 덧셈
1~1,000 999번 덧셈
1~10,000 9,999번 덧셈
1~100,000 99,999번 덧셈
알고리즘 2
1~10 5번 덧셈, 1번 곱셈, 총 6회
1+10, 2+9, 3+8....... 11*5
1~100 50번 덧셈, 1번 곱셈, 총 51회
1+100, 2+99, 3+98.... 101*50
1~1,000 500번 덧셈, 1번 곱셈, 총 501회
1~10,000 5,000번 덧셈, 1번 곱셈, 총 5,001회
1~100,000 50,000번 덧셈, 1번 곱셈, 총 50,001회
p117 모둠 활동
01 이 게임에서 사용할 수 있는 알고리즘은 두 가지로, 각 모둠의 B학생이 각각 서로 다른 알고리즘을
사용하여 누가 더 빨리 숫자를 맞히는지 알아보자
알고리즘 1 | 알고리즘 2 |
알고리즘 1의 경우 총 20개의 숫자 중에서 특정 숫자를 맞추는 것이라면 최선의 경우는 1번, 최악의 경우는 20번의 연산 과정을 거친다. 따라서 평균적으로 10번의 연산 과정을 거친다고 할 수 있다. | 알고리즘 2의 경우 최악의 경우에도 5번의 연산 과정을 거치면 숫자를 맞출 수 있다. |
02 위의 활동 결과 어떤 방식이 더 빨리 정답을 맞힐 수 있는지 결정하고, 그 이유에 대해서 모둠원과 토론하고,
그 결과를 아래의 빈칸에 적어 보자.
더 빨리 맞힌 알고리즘 | 더 빨리 맞힐 수 있는 알고리즘은 두 번째 알고리즘이다. |
이유 | 특정 값보다 큰지 작은지를 비교하여 한 쪽의 데이터 군으로 확정할 수 있으므로 순차적으로 비교하는 알고리즘보다 비교 횟수를 줄일 수 있기 때문입니다. |
p121
(01)
1번 p109 표3번째
2번 p110 9번째줄
3번 p111 1~2번째줄
4번 p115 1~2번째줄
(02)
1번 p109 1번째줄 알고리즘
2번 p110 7~8번째줄 의사코드
3번 p115 1번째줄 시간복잡도
4번 p115 4~6번째줄 빅-오 표기법
p122 로봇 애완견
로봇 애완견은 강아지와 같은 매력을 가지고 있어요
기본 기능으로 몇가지 멋진 행동을 보여주고 '멍멍'소리를 냅니다.
터치 센서가 내장되어 있어 턱을 만지면 당신의 명령에 맞게 움직이며 목소리로 응답합니다.
100개 정도의 명령을 기억할 수 있습니다.
로봇 청소기
로봇 청소기는 각종 센서를 탑재하고 자동으로 움직이면서 청소를 하는 로봇이다.
스스로 움직이는 로봇이라는 점에서 기존의 진공 청소기와 다르다.
각종 센서가 탑재되어서 주로 바닥을 청소하는 데 사용되고 최근에는 카펫 청소 기능이 포함된 제품도 출시되었다.
p123
컴파일러 : 어떤 언어의 코드 전체를 다른 언어로 바꿔주는 과정이다.
그리고 이것을 자동으로 수행해주는 소프트웨어를 컴파일러라고 한다.
코드가 실행되기 전 컴파일러를 거쳐서 기계어로 모두 변환되어 실행되는 프로그래밍 언어
디버깅 : 오류를 찾아 수정하는 것
프로그램 속에 있는 에러를 '버그' 라고 하는데,
오류를 벌레(Bug)에 비유한 것이다.
p124 문법이나 형식에 따른 글자색 예
p124 파이선 라이브러리
파이선 라이브러리는 프로그래밍을 할 때 자주 사용되는 기능들을 모아놓은 코드 집합.
라이브러리를 사용하면 일일이 모든 기능을 직접 구현할 필요 없이,
이미 작성된 기능들을 불러와서 사용할 수 있다.
기본적으로 포함된 표준 라이브러리와, 추가로 설치해서 사용할 수 있는 외부 라이브러리가 있다.
예) 표준 라이브러리
math 라이브러리 : 수학적인 계산을 쉽게 할 수 있게 도와준다.
ex) import math
print(math.sqrt(16)) # 4.0 (16의 제곱근)
datetime 라이브러리 : 날짜와 시간을 다룰 수 있다.
ex) import datetime
now= datetime.datetime.now()
print(now) # 현재 날짜와 시간 출력
randome : 랜덤 한 숫자를 생성할 수 있다.
ex) import random
print(random.randint(1,10)) # 1부터 10까지 랜덤 정수 출력
p126 파이선 설치
(설치시 주의사항)
Add_Python 을 먼저 체크한 후, Install Now 를 눌러 설치합니다.
p132
예약어 : 예약어 (또는 키워드)란 파이썬에서 이미 문법적인 용도로 사용되고 있기 때문에 변수명 등의 식별자로 사용하면 안 되는 단어들을 말한다. 파이썬에서 이미 사용되고 있는(용도가 예약된) 단어들을 지칭하며 이미 문법적인 용도로 사용되기 때문에 변수명 등의 식별자로 사용하면 안 된다.
예 : if, for, while 등의 예약어는 조건문, 반복문 등의 구문을 구성하는데 사용된다.
(만약 예약어를 변수나 함수의 이름으로 사용하려고 하면, 문법 오류가 발생한다)
주요 예약어
● and, or , not : 논리 연산자
● del : 변수 삭제
● for, while : 반복문
● if, elif, else : 조건문
● import : 모듈 가져옥
● in, is : 비교 연산자
● None : 값이 없음을 나타내는 특별한 상수
● pass : 아무런 동작을 하지 않는 구문
● return : 함수의 결과 반환
● True, False : 불린 값
p134
print("\\") [결괏값] \
print("오늘\n" "내일")
[결괏값]
오늘
내일
p141
map함수 : 입력 값을 변수 두 개에 나눌 때 사용할 수 있는 함수
예)
a, b= map(int, input().split())
print(a+b)
10 20 (입력)
>>> 30
input() : 입력값을 문자형으로만 출력해주는 함수
split() : 입력값을 공백을 기준으로 나누어주는 함수
map() : 입력값을 두 개의 변수에 나누어 저장할 때 사용하는 함수
두 개의 변수에 입력받은 값을 정수형으로 나누는 방법 : map(int, input().split())
p153
난수 : 정의된 범위 내에서 무작위로 추출된 수를 일컫는다. 난수는 누구라도 그 다음에 나올 값을 확신할 수 없어야 한다.
작성중...
|