CS50 2019 [1] 컴퓨팅 사고

Doozuu·2023년 6월 15일
0

CS

목록 보기
5/5

이 강의는 네이버 부스트코스에서 제공하는 하버드 대학의 프로그래밍 기초 강의입니다.


컴퓨터 과학이란?

: 문제 해결에 대한 학문이다.
문제 해결은 input을 받아 output을 만들어내는 것을 말한다.

이를 위해서는 input과 output을 표현하는 방법에 대한 약속이 우선시되어야 한다.
컴퓨터에서 이를 표현하는 방법은 2진법이다.


2진법

우리가 일상에서 사용하는 숫자 체계는 10진법이다.(0~9까지)
그러나 컴퓨터는 0과 1로만 데이터를 표현할 수 있고, 이와 같이 0과 1로만 표현하는 방법을 2진법이라고 한다.

123이라는 숫자가 주어질때 우리는 자연스럽게 '백이십삼' 이라고 읽는다.
이렇게 인식하는 이유는 1을 백의 자리 숫자로 인식하고 2는 십의 자리, 3은 일의 자리로 인식하기 때문이다.
이를 식으로 표현하면 100 x 1 + 10 x 2 + 1 x 3 과 같다.

우리가 이렇게 받아들이는 이유는 각 자리 숫자를 10의 거듭제곱로 나타내도록 약속했기 때문인데, 2진법에서는 이와 유사하게 각 자리 숫자를 2의 거듭제곱로 나타낸다.

예를 들어 2진법에서 11이라는 숫자는 3을 의미한다.
첫 번째 자리는 1을 나타내고 두 번째 자리는 2를 나타내기 때문이다.(1+2)

또다른 예시로 2진법에서 1001은 숫자 9를 의미한다.(네 번째 자리 : 8, 첫 번째 자리 : 1)


비트(bit)

2진법에서 하나의 자릿수를 표현하는 측정 단위를 비트라고 한다.
비트는 이진 숫자라는 뜻을 가진 binary digit의 줄임말로, 0과 1만을 가질 수 있다.
(컴퓨터에는 트랜지스터라고 불리는 굉장히 많은 스위치가 있고, on/off 상태를 통해 0과 1을 표현한다.)


비트열

하나의 비트는 0과 1만을 저장할 수 있기 때문에 많은 양의 데이터를 나타내기에 부족하다.
여러 숫자 조합을 컴퓨터에 나타내기 위해서는 비트열을 사용한다.

바이트는 8개의 비트가 모여 만들어진 것이다.
각각의 비트는 2가지 값을 가질 수 있으므로 1바이트는 2^8 = 256비트이다.

킬로바이트는 1000바이트, 메가바이트는 1000킬로바이트, 기가바이트는 1000메가바이트, 테라바이트는 1000기가 바이트이다.


정보의 표현

1) 문자의 표현

문자 또한 숫자로 표현할 수 있다.

예를 들어 A는 10진법 기준으로 65로 나타낼 수 있는데, 65는 64 + 1 이므로 2진법으로 나타내면 1000001이다.(B는 66, C는 67,,)
또 다른 예시로 72 73 33hi!를 의미한다.

이렇게 문자를 어떤 숫자로 표현 할 것인지를 정한 표준 중 하나가 ASCII이다.
ASCII(아스키코드/American Standard Code for Information Interchange)는 정보 교환을 위한 미국 표준 코드로, 전 세계 사람들이 수십년 전에 동의한 약속이다.

ASCII로는 문자들을 표현하기에 충분하지 않았기 때문에 Unicode라는 표준에서 더 다양한 문자들을 표현가능 하도록 지원하고 있다.
Unicode에서는 😂 -> 요런 이모티콘들도 숫자로 표현할 수 있게 해주었다. 이 이모티콘은 10진법으로 128514이고, 이진법으로는 11111011000000010 이다.


2) 그림, 영상, 음악의 표현

그림 또한 숫자로 표현할 수 있다.

그림을 이루는 각각의 작은 점들을 픽셀이라고 부르는데, 픽셀은 RGB(Red, Green, Blue)로 이루어져 있다.

위에서 예시로 나왔던 72 73 33 를 RGB로 보면 각 색깔의 농도로 해석된다.
-> Red : 72, Green : 72, Blue : 33 이를 섞으면 실제로는 노란 색이 나온다.

영상은 수많은 그림을 이어붙인 것이기 때문에 마찬가지로 숫자로 표현이 가능하며, 음악도 각 음표를 숫자로 표현할 수 있다.

퀴즈 : CS50을 2진법으로 표현한다면?

C : 67 , S : 83, 50
67 = 64 + 2 + 1 -> 1000011
83 = 64 + 16 + 2 + 1 -> 1010011
50 = 32 + 16 + 2 -> 110010
=> 답 : 1000011 1010011 110010


알고리즘이란?

알고리즘은 input에서 받은 자료를 output으로 만들기 위한 처리 과정을 뜻한다.

예시로 전화번호부에서 Mike Smith를 찾는 알고리즘은 다음과 같다.

  1. 처음부터 끝까지 모든 페이지에서 이름을 찾는다. -> 비효율적
  2. 가운데 페이지에서 먼저 이름을 찾고 없으면 알파벳 순서에 따라 그 뒤나 앞 패이지들의 가운데에서 다시 이름을 찾는다. -> 효율적

의사코드(Pseudo code)

의사코드는 컴퓨터가 수행할 작업을 프로그램 언어가 아니라 사람이 사용하는 언어로 알고리즘의 논리적 절차를 작성한 코드를 말한다.
알고리즘을 짤 때 필요한 행동이나 조건을 의사코드로 나타낼 수 있다.

퀴즈 : 친구와 1부터 100까지 숫자 중 1가지 숫자를 맞추는 스무고개 게임을 하려고 합니다. 이 때 사용할 알고리즘을 의사코드로 표현하면 어떻게 될까요?

  1. 1 ~ 100까지 숫자 중 하나를 변수에 저장해둔다.
  2. 친구에게 받은 질문 갯수를 셀 변수를 만든다.
  3. 질문(숫자)을 입력으로 받아 설정해둔 답과 비교한다.
  • 입력값과 답이 같은 경우 : '정답!'를 출력한다.
  • 입력값과 답이 다른 경우 :
    - 입력값이 답보다 크다면 'down'을 출력한다.
    • 입력값이 답보다 작다면 'up'을 출력한다.
  • count를 증가시킨다.
  1. count가 20보다 같거나 작은 경우 3번 과정을 반복한다.
  2. count가 20보다 커지면 '실패!'를 출력한다.

전체 복습 퀴즈

10은 8 + 2로 나타낼 수 있으며, 이를 2진법으로 나타내면 1010이다. 네 자리가 필요하므로 4비트가 필요하다.


512 / 2 / 2 / 2 = 64 이므로 3번이다.

14는 8 + 4 + 2로 나타낼 수 있으며, 이를 2진법으로 나타내면 1110이다.

8 + 2 + 1 = 11이다.




true로 바뀐다.

profile
모든게 새롭고 재밌는 프론트엔드 새싹

0개의 댓글