이것저것 관심가는 대로.zip

STUDY/boostcourse

[부스트코스] CS50 1강: 컴퓨팅 사고 강의 정리

썸원 2021. 1. 16. 00:00

* boostcourse 카테고리 내의 CS50관련 글은 네이버 부스트코스 [CS50 - 모두를 위한 컴퓨터 과학]을 수강 후 개인적으로 개념을 정리해본 글. 자세한 강의 내용을 확인하고 싶다면 네이버 커넥트재단이 운영하는 boostcourse 사이트에서 상시 무료 수강으로 진행되고 있는 CS50 강의 수강을 추천합니다.

 

모두를 위한 컴퓨터 과학 (CS50 2019)

부스트코스 무료 강의

www.boostcourse.org

“네이버 커넥트재단은 교육을 통해 개인의 지속적인 성장과 발전을 돕고, 원하는 곳 어디든 배움의 기회가 열리는 세상을 만들기 위해 노력합니다. 부스트코스는 커리어 역량을 강화할 수 있도록, 네이버 커넥트재단에서 기획하고 운영하는 실무형 온라인 교육 프로그램입니다.”

>> 부스트코스 홍보까지는 아니고 ㅎ 무료 강의 추천이다 ㅎ


2021/01/10 - [boostcourse] - [부스트코스] CS50 코칭스터디 2기 오리엔테이션


CS50 1강 컴퓨팅 사고(Computational Thinking, Scratch)

  1. 2진법
  2. 정보의 표현
  3. 알고리즘
  4. 스크래치(Scratch)

2021/01/22 - [boostcourse] - [부스트코스] CS50 2강: C언어 강의 정리 (부제: 코딩 찌질이)

2021/01/29 - [boostcourse] - [부스트코스] CS50 3강: 배열 강의 정리 (부제: 코칭스터디 3주차)

2021/02/05 - [boostcourse] - [부스트코스] CS50 4강: 알고리즘 강의 정리 (부제: 아직 2주나 혹은 벌써 2주 남은 코칭 스터디)

2021/02/12 - [boostcourse] - [부스트코스] CS50: 초보자는 헷갈리는 C언어 용어 정리

2021/02/14 - [boostcourse] - [부스트코스] CS50 5강: 메모리 강의 정리 (부제: 설연휴 만세)

2021/02/23 - [boostcourse] - [부스트코스] CS50 6강: 자료구조 강의 정리 (부제: CS50 수강 완료!)

2021/03/03 - [boostcourse] - [부스트코스] CS50 코칭스터디 2기 수료 후기

 

1. 2진법

컴퓨터 과학이란? "문제 해결에 대한 학문"
문제 해결이란, 입력을 전달받아 출력을 만들어 내는 과정으로 그 중간에 있는 과정이 컴퓨터 과학이다.

→ 이런 입력과 출력을 표현하기 위해 약속한 방법(표준)=2진법

컴퓨터 사이언스

이진법
0과 1 두 종류의 숫자로 수를 나타내는 방식으로 수를 이진법으로 나타냈을 때, 그 연산의 규칙은 0+0=0, 1+0=1, 1+1=10, 0×0=0, 1×0=0, 1×1=1이며 이진법에 따라 큰 수를 나타내는 데는 긴 자리수를 필요로 하지만, 이진법은 컴퓨터에 폭넓게 쓰이므로, 특히 중요하다. 우리가 일상 사용하는 수는 0에서 9까지의 10종류 숫자로 수를 나타내는 십진법이다. 십진법의 1은 이진법에서는 1, 십진법의 2는 이진법에서는 10, 십진법의 3은 이진법에서는 11,… 등이다. 수를 이진법으로 나타냈을 때, 그 연산의 규칙은 다음과 같다. 0+0=0, 1+0=1, 1+1=10, 0×0=0, 1×0=0, 1×1=1. 이진법에 따라 큰 수를 나타내는 데는 긴 자리수를 필요로 하지만, 이진법은 컴퓨터에 폭넓게 쓰이므로, 특히 중요하다. 컴퓨터에서 이진법이 사용되는 이유는, 논리의 조립이 간단하고, 컴퓨터에서 사용하는 소자(素子)가 이진법의 수를 나타내는 데 편리하다는 것, 즉 0과 1의 두 상태밖에 구별되지 않는 것이 많기 때문이다.

일반적으로 이진수 αnαn-1…α1α0 ·α-1α-2…α-m 십진수로 나타내면,αn×2n+αn-1×2n-1 +…+α1×2+α0+α-1×2-1+α-2×2-2+…+α-m×2-m이 된다. 단, αi는 0 또는 1이다. 이를테면, 이진수 111011을 십진수로 나타내면, 다음과 같다.  111011(2)=1×25+1×24+1×23+0×22+1×21+1×20=59(10)십진수를 이진수로 고칠 때는 십진수를 계속하여 2로 나눈 다음, 나머지를 아래부터 차례로 나열하면 된다.

[네이버 지식백과] 이진법 [binary notation, 二進法] (두산백과)

 

예컨대, 15와 11을 이진법으로 나타내기 위해선 아래와 같은 방법을 이용하면 쉽다.

이진법이진법
십진법에서 이진법으로 바꿔 표현하기

 

컴퓨터에서 이진법을 사용하는 이유?

전기를 켜고(1) 끄는(0)방식으로 작동하는 컴퓨터에게 적합하다. 컴퓨터에는 굉장히 많은 스위치(트렌지스터)가 있고 on/off 상태를 통해 0과 1을 표현한다.

이진법
1bit


컴퓨터가 2진법에서 하나의 자릿수를 표현하는 단위를 비트(bit)라고 한다. 비트는 이진 숫자라는 뜻의 "binary digit"의 줄임말로, 0과 1의 두 가지 값만 가질 수 있는 측정 단위이다.

비트 한 개는 많은 양의 데이터를 표현하기에 턱없이 부족하기 때문에, 여러 숫자 조합을 나타내기 위해 비트열을 사용한다.
바이트(byte)는 여덟 개의 비트가 모여져 만든 값이다(1byte=8bit). 그러므로 1바이트에는, 2^8=256개의 서로 다른 비트가 존재한다.

 

비트(bit) 0 또는 1 예 또는 아니오
바이트(byte) 8bit 영어 알파벳 한 개
킬로바이트(KB) 1,000byte 몇 개의 문단
메가바이트(MB) 1,000KB 1분 길이의 MP3 노래
기가바이트(GB) 1,000MB 30분 길이의 HD영화
테라바이트(TB) 1,000GB 심슨 가족 열 여섯 시즌

 

 

 

2. 정보의 표현

스위치의 on/off를 통해 숫자를 표현한다면, 문자는 어떻게 표현할까?
문자를 숫자로 변환하여 표현할 수 있도록 정해진 약속(표준)인, 설명미국정보교환표준부호 ASCII(아스키코드/American Standard Code for Information Interchange)를 통해 가능하다.

그러나 아스키코드는 각 나라별 언어를 표현할 수가 없어서 유니코드가 나오게 된다.

각 나라별 언어를 모두 표현하기 위해 나온 코드 체계가 유니코드(unicode)다. 유니코드는 사용중인 운영체제, 프로그램, 언어에 관계없이 문자마다 고유한 코드 값을 제공하는 새로운 개념의 코드다. 언어와 상관없이 모든 문자를 16비트로 표현하므로 최대 65,536자를 표현할 수 있다.

한글은 AC00부터 D7A3까지 총 11,172자를 표현하는데, 이런 글자 수는 초성 19개, 중성 21개, 종성 28개를 곱한 값이다. 종성은 원래 27개지만, 종성이 없는 경우를 포함해 28개가 된 것이다. 초성 19 × 중성 21 × 종성 28 = 11,172

[네이버 지식백과] 유니코드 (컴퓨터 개론, 2013. 3. 10., 김종훈, 김종진)

이러한 유니코드를 통해 이모지까지 표현이 가능하다😎👍.
😂(lol)10진법으로 128,514 / 2진법으로는 11111011000000010이다.

그림, 영상, 음악의 표현

스크린을 통해 보는 그림을 자세히 살펴 보면 수많은 작은 점들이 빨간색R, 초록색G, 파란색B을 띄고 있는데, 각각의 점을 픽셀이라고 부른다. 각각의 픽셀은 세 가지 색을 서로 다른 비율로 조합하여 특정한 색을 갖게 된다.

그림 이진법
포토샵으로 확대한 이모지. 픽셀이 하나하나 보인다.

예를 들어 빨간색 72, 초록색 72, 파란색 33을 섞게 되면 노란색이 되는 것이다. 이러한 표현 방식을 RGB라고 한다. 즉, 노란색의 커다란 이미지는 72 73 33 으로 정의되는 무수히 많은 픽셀들의 RGB코드(숫자)로 표현할 수 있는 것이다.

영상은 무수히 많은 그림을 이어붙여 보여주는 것이기 때문에 역시 숫자로 표현이 가능하다.

음악도 음, 길이, 음량 등을 모두 숫자로 변환하여 표현할 수 있다.

 

 

 

3. 알고리즘

앞선 이진법에 대한 설명은 결국 컴퓨터가 이해할 수 있는 방법으로 정보를 변환하여 입력하는 방법에 대해 말한 것으로, input → output 중 input(입력)에 해당한다. 그렇다면 output(출력)은 어떻게 가능할까?

컴퓨팅은 입력을 받아 출력하는 과정이다.
알고리즘(algorithms)은 입력에서 받은 자료를 출력하는 형태로 만드는 처리과정을 뜻한다.

알고리즘
알고리즘

즉, 알고리즘이란 입력값을 출력값의 형태로 바꾸기 위해 어떤 명령들이 수행되어야 하는지에 대한 규칙들의 순서적 나열이다. 같은 출력값이라도, 어떤 알고리즘에 따라 출력하느냐에 따라 시간이 크게 달라진다. 따라서 출력값을 나타내는 "정확한 알고리즘"도 중요하지만 "정확하고 효율적인 알고리즘"이 더 중요하다.

 

알고리즘
정확한 알고리즘과 효율적인 알고리즘의 비교

 

위에서 작성된 코드는 의사코드(pseudo code)로, 특정 프로그래밍 언어의 문법에 따라 쓰여진 것이 아니라, 일반적인 언어로 코드를 흉내내어 알고리즘을 써놓은 것이다. 의사(疑似)코드는 말 그대로 흉내만 내는 코드이기 때문에, 실제적인 프로그래밍 언어로 작성된 코드처럼 컴퓨터에서 실행할 수 없으며, 특정 언어로 프로그램을 작성하기 전에 알고리즘의 모델을 대략적으로 모델링하는 데에 쓰인다. 참고로 중간중간 들여쓰기가 되어있는 부분은 위 문장에 대한 종속 관계를 나타낸다.

의사코드의사코드의사코드의사코드
(함수 / 조건 / 불리언(Boolean) / 루프(loop)

의사코드에서 노란색으로 강조된 부분에 대한 설명은 각각 아래와 같다.

함수 조건
무엇을 할 지 알려주는 '동사(Verb)'의 역할 여러 선택지 중 하나를 고르는 것
불리언(Boolean) 루프(loop)
Yes(예) 또는 No(아니오)
혹은 True(참) 또는 False(거짓)으로 나오는
아니면 2진법에서 0또는 1로 나오는 질문
계속해서 반복하는 순환

 

 

 

4. 스크래치

미국 매사추세츠공과대학(MIT) 미디어랩(Media Lab)의 라이프롱킨더가든그룹(LKG)이 만들어 무료로 제공하는 스크래치라는 그래픽 프로그래밍 언어를 사용하면 블록을 옮겨 붙여서 알고리즘을 만들어 볼 수 있다. 블록 모양의 다양한 코드들을 옮겨가며 만들어 볼 수 있기 때문에, 코딩에 대한 개념을 쉽게 배워볼 수 있다.

스크래치
스크래치 실행화면

스크래치를 통해서 조건문을 활용하여(If~, else) 복잡한 코딩을 할 수도 있다(고 한다). 하지만 나는...(말잇못). 그러므로 오늘의 정리는 여기서 급하게 마무리. 정리하는 게 수업 듣는 시간보다 더 오래 걸린다.

 


728x90