-
CS50 2019 (1)컴퓨터 과학은 문제해결 상자, 정보표현, 내 문제해결을 기계에게 번역CS50 2021. 8. 9. 20:24
===
모두를 위한 컴퓨터 과학 (CS50 2019)
부스트코스 무료 강의
www.boostcourse.org
1.컴퓨팅사고
2.C언어
3.배열
4.알고리즘
5.메모리
6.자료구조
===
각 강의마다 네이버에서 쓴 설명과 참고자료들이 있다
===
@교수님도 CS 수업을 듣기 전엔 컴퓨터과학이라는 것이 두려웠지만 -> 용기를 내어 문을 열었다
1.새로운 걸 시도하는것에 저처럼 불안해도 아주 좋은 친구들도 나와 함께한다는걸 기억해
2.남과 비교하지 말고 처음의 나와 비교해서 얼마나 성장했는가
===
컴퓨터과학이란
컴퓨터가 작동하기 위해 어떤 약속들이 필요한지
컴퓨터가 정보를 표현하는 방법
===
컴퓨터과학이란 문제 해결 과정
: 어떤 input이 있을때 특정 output이 나오게 하는 중간 과정
프로그래밍이란 문제 해결 도구
: 문제를 해결하기 위해 컴퓨터를 사용하는 것.
(▽날 때 날개 쓰듯이, 컴퓨터를 계산기 심화버전으로 발명 해놓고보니 기계의 장점이 있어서(인간보다 반복 잘하는 등) 이것에도 저것에도 활용할 수가 있네?)
기계를 사용할 땐 입력과 출력을 어떻게 표현할지에 대해 모두가 동의할 수 있어야, 그래서 컴퓨터 과학의 첫 번째 개념은 정보 자체의 표현 방법이다.
===
1)2진법
컴퓨터는 0과 1이라는 숫자밖에 없지만 숫자뿐만 아니라 글자와 사진, 영상, 소리 등 많은 것들을 저장할 수 있다.
어떻게 이게 가능한거야? 스마트폰을 어떻게 0과 1로만 만들어?(이 0 과 1이 비트다.)
전기가 우리의 유일한 입력이라면 전기 있음 or 전기 없음 두 가지 만이 존재.
->이는 이진법과 꽤 잘 맞음 0과 1만 있으면 되니까
컴퓨터는 많은 수의 비트를 활용하여 정보를 표현.
byte는 8비트. 8개의 1과 0을 의미하는 더욱 효과적인 단위.
바이트만 해도 256개의 서로 다른 바이트가 존재할 수 있음. (2^8)
하나의 비트로는 참인지 거짓인지 정보가 가능 : 충전중인지 아닌지 등
바이트로는 알파벳 하나를 표시가능(▽이진법으로 숫자 50이라는 정보를 표현하는 것처럼)
트랜지스터는 컴퓨터 속의 아주 작은 스위치인데, 컴퓨터는 수백만, 수십억개의 이 스위치를 갖고 있다.
이들을 물리적으로 이용해서 정보를 표현하고 값을 저장. 스위치를 켜고 각각에 아주 조금의 전기를 저장!
이걸 on/off하며 숫자를 표현
=====================
위는 주로 숫자를 표현하는 방법
2)정보의 표현 : 컴퓨터는 어떻게 문자와 이메일을 보낼 수 있는걸까? 알파벳의 문자나 글자 등을 어떻게 표현할지에 대해 모두가 동의해야 함
▽모두가 동의 = 약속
A도 숫자로 어떻게 표현할지 모두가 동의하기만 하면 됨. -> 컴퓨터는 수많은 작은 트랜지스터들을 켜서 ABC를 표현할 것. 실제로는 A는 65다.
(1바이트에서 6번째 스위치, 1번째 스위치를 켜는 것.) 64 + 1
ASCII 정보교환을 위한 미국 표준 코드, 72 73 33 = h i !
(ASCII의 상위집합)유니코드, ASCII는 8비트, 유니코드는 16, 24, 32비트까지도 사용)
(이모지도 사실 노란 점으로 이루어져 있지만 키보드에서 입력하는 이모티콘은 약속 돼 있음, 128514(=11111011000000010)이런식, 이걸 안드로이드나 ios는 노란색 사진으로 나타내는 것)
사진은 점으로 이루어져 있음, 화질이 낮다면 그 점들을 볼 수도 있다.
컴퓨터는 작은점들을 어떻게 표현할까? RGB라고 불리는 체계에 의해 표현
수십년 전 사람들은 색깔을 나타내기 위해 0과 1만 사용하면 된다는 데 모두 동의했고(기계적으로는 스위치)
어떤 숫자가 어떤 색깔을 나타낼지를 정함. - 또다른 체계가 필요.
무지개에 있는 모든 색들은 빨강, 초록, 파랑으로 이루어져 있다는 게 밝혀졌고 우리가 찍거나 보내는 사진 속의 하나의 점, 하나의 픽셀을 저장하려면 3개의 값을 저장해야 함. 빨강 초록 파랑을 얼마나 사용해서 화면 상의 점을 나타낼 것인가?
72 73 33을
(1)어떤 프로그램에선 숫자로 해석해서 hi! 로 표현할 수 있고
(2)어떤 프로그램에선 빨강 초록 파랑의 양으로 받아들일 수도 있고 = 노란색
->아하 똑같이 숫자 세개를 나열해도 어떤 프로그램이냐에 따라 다르군
사진은 점의 모임
움짤도 사진의 모임 - 한 사진 뒤에 다른 사진, 그 뒤에 또 다른 사진, 빠르게 보여줘서 착시일뿐
동영상도 마찬가지
=>이것이 우리가 오늘날 컴퓨터에서 정보를 표현하는 거의 모든 방법!!
- 0과 1을 사용해서 2진수를 나타내고
> 이를 통해 10진수를 나타내고
> 10진수를 사용하여 화면 상의 글자나 색깔을 나타내고
> 나아가 영상까지
> 음악은?어떤 음을 연주하든지 ABCDEFG와 비슷한 뭔가. 혹은 얼마나 오랫동안, 얼마나 세게, 크게 그 음을 연주, 음과 길이 그리고 음량 3가지 값이다.
->어떤 정보든 뭐든지 이렇게 표현할 수 있다.
결국 어떤 방법을 사용해서 정보를 나타내든 결국 0과 1들로 표현된다!
CS50 = 67 83 50 = 01000011 01010011 00110010 : 댓글에 보면 50을 이상하게 표현하는 애들이 있는데 뭐지
=====================
3)알고리즘
위까진 입력이었고
알고리즘은
= 규칙들의 순서적 나열
= 처리과정
= 입력으로부터 출력을 얻는 일
= input과 output사이의 블랙박스에서 일어나는 일
= 컴퓨터과학이 일어나는곳
= 뭔가를 수행하는 방식의 집합
= 문제를 해결하는 단계적 방법 !
ex.전화번호부
한 장 넘겨서 찾는사람있나 한 장 넘겨서 찾는사람있나 한 장 넘겨서 찾는사람있나 반복 = 알고리즘(정확한)
중간쯤 펴서 앞이냐 뒤냐 중간쯤 펴서 앞이냐 뒤냐 = 알고리즘(정확하고 효율적인)
->이거구나
대부분의 경우 문제해결은 단지 여러분이 이미 가지고 있는 직관이나 생각들을 기계나 다른 사람들이 이해할 수 있는 방식으로 번역하는것에 불과하다(▽내가 하기 힘들거나 할 수 없는 반복 동작 등을 기계는 할 수 있는 일이 있고 시키는 것인데 기계가 알아들을 수 있게 말을 해야함)
1.전화번호부를 들고
2.중간페이지를 펴고
3.페이지를 살펴보고
4.그 페이지에 스미스가 있으면
5. 마이크에게 전화를 걸고
6.else if(위쪽 if가 아니면) 스미스가 앞에 있으면
7. 책의 왼쪽 절반에서 가운데를 편다.
8. 3번째 줄로 돌아감.
9.else if 스미스가 책 뒤쪽에 있다면
10. 오른쪽 절반의 중간을 편다.
11. 3번째 줄로 돌아간다.
12.Else(어디에도 없다면)
13. Quit(그만둔다)
소위 절차적 프로그래밍이라 하는 특정한 건설법이 모든 언어들(C, 파이썬)에 공통적으로 존재
->함수(Open, Call 등), 컴퓨터에게 뭘 할지 알려주는 동사.
->Else if 같은건 조건. 여러 선택지 중 하나를 고르는 것.
->불리언 표현.(▽명제) 스미스가 있니, 고양이를 만지니 등의 예 아니오 참 거짓으로 대답 가능한 질문(0 or 1)
->루프, 어디어디로 돌아간다, 뭔갈 계속해서 반복하는 순환.
이외에도 변수(variables), threads, events 등 다양한 것들이 있다. 프로그래밍 언어를 사용하는 방식으로 다룸.
=====================
4)5)스크래치 : 알고리즘을 만들기 위해 프로그래밍 언어를 사용할 수 있다.
MIT의 미디어랩에서 만든 스크래치라는 그래픽 언어
변수를 대수학처럼 x, y, z라기 보단 counter 등 더욱 구체적인 이름을 붙임.
0부터 세기 : 컴퓨터 과학자들은 숫자를 셀 때 0부터 세는 습관이 있다. 모든 전구가 꺼진 상태를 나타내기 때문.
게임의 이면 : 고양이 다리 사진 두 개로 움직이는 것처럼 보이게 하는 것
8분 - 하나를 작동시키고 나머지 하나로 그걸 켰다 껐다 시킬 수 있음
10분 - 개체 두 개가 있는데 하나가 나머지 하나를 작동 시킬 수 있음.
복사 후 붙여넣기 보단, 여러 가지를 묶어 루프를 쓸 수록 좋은 코드 - 관리하기에 용이, 앞으로의 수정 등에
12분 - 고양이를 세 번 연속 기침하는데 중간에 1초 기다리고 등을 시킴. 기침 기능을 어떻게 구현했는지 알 수 있다.
근데 이걸 하나로 묶어서 추상화의 개념으로 표현하면?
기침할 수 있는지만 신경쓰는 것이다(기침횟수만 받으면 ▽1초 기다리는건 그냥 디폴트로 깔리는 개념으로).
이런식으로 코드를 훨씬 덜 복잡하고 더 짧게 만들고 실수도 줄일 수 있다. -> 1초 기다리는 것 등 내가 기침을 보는게 정확히 어떻게 구현되었는지 알 필요 없음.
'CS50' 카테고리의 다른 글
CS50 2019 (6)배열 (0) 2021.08.09 CS50 2019 (5)컴파일(4단계), 디버깅, 코드의 디자인 (0) 2021.08.09 CS50 2019 (4)사용자정의함수(vs루프), 추상화, 프로토타입, 오버플로우 (0) 2021.08.09 CS50 2019 (3)변수, 조건->루프, 디자인적 관점, 연산자 (0) 2021.08.09 CS50 2019 (2)C, .c, #include, .out, -o, 문자열, printf, %, 표준라이브러리, 라이브러리 사용, make (0) 2021.08.09