본문 바로가기

CS50

1. 컴퓨팅 사고

* 모두를 위한 컴퓨터 과학(CS50 2019) 강의를 듣고 요약한 내용입니다. 해당 글에는 퀴즈에 대한 정답 및 풀이도 있습니다. 아직 퀴즈를 풀지 못하신 분들은 퀴즈를 풀고 난 후에 해당 포스팅을 읽으시길 바랍니다.

 

목차

1) 2진법

2) 정보의 표현

3) 알고리즘

4) 스크래치 기초

5) 스크래치 심화

 

 


1. 컴퓨팅 사고 - 2진법

학습 목표: 컴퓨터 과학이 무엇인지 정의하고, 컴퓨터가 정보를 표현하는 방법에 대해 설명할 수 있습니다.

 

컴퓨터 과학

- 컴퓨터 과학은 문제 해결에 대한 학문

- 문제 해결: 어떠한 입력(input)을 전달받아 어떠한 출력(output)을, 그 문제에 대한 답을 찾는 것

- 그 중간에 있는 과정이 바로 컴퓨터 과학
- 이러한 입력과 출력을 표현하기 위해선 우선 약속(표준)이 필요
- 따라서 컴퓨터 과학의 첫 번째 개념은 어떻게 표현하는지에 대한 표현 방법입니다.

 

 
 

2진법

- 컴퓨터에서는 오직 0과 1로만 데이터를 표현
-
이처럼 0과 1로만 표현하는 것을 2진법

- 컴퓨터는 0과 1만으로 숫자 뿐만 아니라 글자, 사진, 영상, 소리 등을 저장
-
2진법에서는 두 개의 숫자만 있으므로 각 자리수가 2의 거듭제곱을 의미
-
2진법은 전기를 통해 연산하는, 즉 전기를 켜고 끄는 방식으로 작동하는 컴퓨터에게 적합한 방법
-
컴퓨터에는 굉장히 많은 스위치(트랜지스터)가 있고 스위치들을 물리적으로 이용해서(on/off 상태를 통해) 0과 1을 표현

 

 
 

비트

- 컴퓨터는 정보를 저장하고 연산을 수행하기 위해 비트(bit)라는 측정 단위를 씁니다.
-
비트는 이진 숫자라는 뜻을 가진 “binary digit”의 줄임말이며, 0과 1, 두 가지 값만 가질 수 있는 측정 단위

 

 

바이트

- 비트 한 개(0과 1)는 많은 양의 데이터를 나타내기에 부족
-
그렇기 때문에 여러 숫자 조합을 컴퓨터에 나타내기 위해 바이트를 사용

- 바이트(byte)는 여덟 개의 비트가 모여 만들어진 것

- 하나의 바이트에 여덟 개의 비트가 있고, 비트 하나는 0과 1 로 표현될 수 있기 때문에 2^8 = 256개의 서로 다른 바이트가 존재할 수 있습니다.

 

 

 


2. 컴퓨팅 사고 - 정보의 표현

학습 목표: 컴퓨터가 문자, 사진, 영상, 음악 등 다양한 정보를 처리하는 방식을 설명할 수 있다.

문자의 표현

- 문자를 숫자로 표현할 수 있도록 정해진 약속(표준)이 있습니다.

- 그 중 하나가 ASCII(아스키코드)

- 총 128개의 부호로 정의, 가령 알파벳 A는 10진수로 65, 알파벳 B는 66로 되어 있습니다.
-
A는 65, 이를 2진법으로 바꾼다면? 01000001
-
Unicode 라는 표준에서는 더 많은 비트를 사용하여 더 다양한 다른 문자들도 표현가능 하도록 지원
-
Unicode는 😂(기쁨의 눈물) 이런 이모티콘 까지 표현
-
이 이모티콘은 10진법으로 128,514 2진법으로는 111111011000000010

 

 

 

그림, 영상, 음악의 표현

- 문자와 같이 그림도 역시 숫자로 표현 가능
-
그림을 자세히 살펴 보면 수많은 작은 점들은 3개의 값을 가지고 있고 이는 각각 빨간색을 얼마만큼 나타낼지, 초록색을 얼마만큼 나타낼지, 파란색을 얼마만큼 나타낼지 에 대한 값
-
이런 작은 점 하나를 픽셀
- 각각의 픽셀은 세 가지 색을 서로 다른 비율로 조합하여 특정한 색을 갖게 된다

- ex) 빨간색 72, 초록색 72, 파란색 33을 섞게 되면 노란색

- 이 숫자들을 표현하는 방식을 RGB(Red, Green, Blue) 체계

- 이미지는 무수히 많은 픽셀들의 RGB코드(숫자)로 표현 가능

- 영상 또한 수많은 그림을 빠르게 연속적으로 이어 붙여놓은 것이기 때문에 숫자로 표현 가능

- 음악도 마찬가지로 각 음표를 숫자로 표현 가능

 

 


3. 컴퓨팅 사고 - 알고리즘

학습 목표: 
1. 우리가 일상생활에서 하는 일들을 컴퓨터가 이해할 수 있는 알고리즘으로 표현할 수 있다.
2. 효율적인 알고리즘에 대해 설명할 수 있다. 

 

알고리즘

- 순서대로 문제를 풀기 위한 지시 절차의 모음

- 숫자, 글자, 색깔 등을 컴퓨터가 이해할 수 있는 2진법(숫자)으로 표현, 입력(input) 단계
- 어떻게 입력(input)에서 출력(output)을 얻을 수 있을까?

- 컴퓨팅: 입력을 받아 그 입력을 처리한 후 출력하는 과정
- 알고리즘은 입력(input)에서 받은 자료를 출력(output)형태로 만드는 처리 과정(문제를 해결하는 단계적인 방법)

 

 

- 알고리즘이란 입력값을 출렵값의 형태로 바꾸기 위해 어떤 명령들이 수행되어야 하는지에 대한 규칙적은 순서들의 나열

 

 

의사 코드

- 필요한 행동이나 조건을 잘 설정하여 컴퓨터가 수행해야 하는 일을 절차적으로 파악할 수 있게 도와줍니다.

 

 

 


4. 컴퓨팅 사고 - 스크래치: 기초

학습 목표: 스크래치를 이용하여 간단한 알고리즘을 구현할 수 있습니다.

 

스크래치

- 알고리즘을 구성하는 요소로는 함수, 조건, 불리언 표현, 루프 등이 있습니다.

- 스크래치라는 그래픽 프로그래밍 언어를 사용하면 블록을 옮겨 붙여서 알고리즘을 만들어 볼 수 있습니다.

- https://scratch.mit.edu/projects/editor/?tutorial=getStarted

 

https://scratch.mit.edu/projects/editor/?tutorial=getStarted

 

scratch.mit.edu

 

 


5. 컴퓨팅 사고 - 스크래치: 심화

학습 목표: 스크래치를 이용하여 보다 복잡한 알고리즘을 구현할 수 있습니다.

 

 


퀴즈

1. 숫자 10을 2진법으로 표현하기 위해서 최소 몇 개의 비트가 필요할까요?

풀이: 10을 2진법으로 표현하면 1010 이므로 총 4개의 비트가 필요합니다.

 

2. 링크(https://ko.wikipedia.org/wiki/ASCII) 하단의 아스키 코드를 사용하여 [edwith](소문자)을 10진수로 표현해 보세요.

풀이: 소문자 e 는 10진법으로 표현하면 101, 소문자 d는 10진법으로 표현하면 100 .. 이런식으로 url 참고해서 맞추면 됩니다.

 

3. 총 512페이지의 전화번호부에서 '이펭수'은 64페이지에 있습니다. 책의 절반씩을 찾아보는 두 번째 알고리즘을 사용한다면, '이펭수'을 찾기 위해 페이지를 몇 번 찾아봐야 할까요?

풀이: 512 를 절반으로 나누면 256, 256을 절반으로 나누면 128, 128을 절반으로 나누면 64. 따라서 3번만 절반으로 나누면 64페이지에 도달할 수 있다.

 

4. 10진법으로 표현된 '14'를 2진법으로 표현하면 어떻게 될까요?

풀이: 1110, (2^3 * 1) + (2^2 * 1) + (2^1 * 1) + (2^0 * 0) = 8 + 4 + 2+ 0 = 14

 

5. 2진법으로 표현된 [1011]을 10진법으로 표현하면 어떻게 될까요?

풀이: (2^3 * 1) + (2^2 * 0) + (2^1 * 1) + (2^0 * 1) = 8 + 0 + 2 + 1 = 11

 

6. 다음 문장에서 괄호 안에 들어갈 말로 적절한 것은 무엇인가요? 컴퓨터에는 (       )라고 불리는 굉장히 많은 스위치가 있고 on/off 상태를 통해 0과 1을 표현합니다.

풀이: 트랜지스터

 

7. 컴퓨터가 수행할 작업을 프로그램 언어가 아니라 사람이 사용하는 언어로 알고리즘의 논리적 절차를 작성한 코드를 무엇이라고 하나요?

풀이: 의사 코드 (Pseudo code)

 

8. 다음 중 스크래치에서 블록을 통해 구현할 수 없는 알고리즘 요소는 무엇인가요?

풀이: 스크래치를 통해 함수, 조건, 루프를 구현할 수 있다.

 

9. 초록색 깃발을 눌러 아래 스크래치 프로그램을 실행을 시킨 후, muted가 false인 상태에서 스페이스 키를 누르면 muted의 값이 어떻게 변할까요?

 

10. 가나다 순으로 정렬된 전화번호부에서 '이펭수'를 찾으려 합니다. 이때 먼저 전화번호부의 가운데를 펴고 '이펭수'를 찾은 후, 이름이 없다면 앞 페이지나 뒷 페이지의 절반에 대해 똑같은 작업을 계속 반복하고자 합니다. 이를 묘사한 아래 의사 코드에서 10번 줄 빈 칸에 들어갈 말로 올바른 것은 무엇인가요?

 

1 전화번호부를 집어 든다
2 전화번호부의 중간을 편다
3 페이지를 본다
4 만약 '이펭수'가 페이지에 있으면
5     '이펭수'에게 전화한다
6 그렇지 않고 만약 '이펭수'이 앞 페이지에 있으면
7     앞 페이지의 절반을 편다
8     3번째 줄부터 다시 실행한다
9 그렇지 않고 만약 '이펭수'가 뒷 페이지에 있으면
10    (뒷 페이지의 절반을 편다)
11     3번째 줄부터 다시 실행한다
12 그렇지 않으면
13     그만둔다

 

 

100점!!

 

 

'CS50' 카테고리의 다른 글

5. 메모리  (0) 2023.08.24
4. 알고리즘  (0) 2023.08.22
3. 배열  (0) 2023.08.17
2. C 언어  (0) 2022.12.14