CS50 1주차 - 컴퓨팅 사고

3 minute read

이 포스팅은 부스트코스의 CS50 2019 강의의 내용을 공부한 글 입니다.

1주차 컴퓨팅 사고

컴퓨터 과학이란 ? 문제 해결에 대한 학문이다.

어떠한 입력 값문제 해결은 입력(input)을 전달받아 출력(output)을

만들어내는 과정이다.

스크린샷 2021-01-11 오후 5 12 57

input과 output의 중간 과정.

스크린샷 2021-01-11 오후 5 48 25

입력과 출력을 표현하기 위해서 우선 모두가 동의할만한 약속(표준)이 필요하다.

그 방법으로 우리는 2진법을 사용하게 되었다.

2진법

0과 1의 조합으로 이루어진 컴퓨터와 소통할 수 있는 방법이 2진법이다.

컴퓨터는 오직 0과 1로만 데이터를 표현한다.

우리가 요즘 날 쓰고있는 컴퓨터나 휴대폰의 글자, 사진, 동영상, 사운드 등을

오직 0과 1로만 저장할 수 있다.

스크린샷 2021-01-11 오후 5 52 15

우리가(사람) 보통 사용하는 10진법이다.

‘백이십삼”으로 읽는 이유는 1을 백의자리, 2를 십의자리, 3을 일의자리로 보기 때문이다.

이것을 표현하면 ‘1x100 + 2x10 + 3x1 = 123’이 된다.

2진법에서는 두 개의 숫자만 있으므로 각 자리수가 2의 거듭제곱을 의미한다.

2진법 네 번째 자리 세번째 자리 두 번째 자리 첫 번째 자리
  2³ = 8 2² = 4 2¹ = 2 1

스크린샷 2021-01-11 오후 5 52 29

위에 사진은 2진법으로 3을 표현한 것이다. 따라서 2진법에서 11은 2¹x1 + 1x1 = 3

따라서 숫자 100(백)은 2진법에서 2²x1 + 2¹x0 + 1x0 = 4 이다.

2진법은 전기를 통해 연산하는, 즉 전기를 켜고 끄는 방식으로 작동하는 컴퓨터에게 적합한 방법이다.

컴퓨터에는 많은 스위치(트렌지스터)가 있고 On Off 상태를 0과 1로 표현한다.

컴퓨터는 2진법에서 하나의 자릿수를 표현하는 단위를 비트(bit)라고 한다.

비트(bit() & 비트열

비트 바이트 메가바이트 기가바이트 테라비이트…. 등등

어릴적 mp3로 노래를 들으면서 파일을 다운바을 때 많이 들어보았던 명칭이다 ㅎㅎㅎ

CS공부를 하면서 정확한 이해를 해였다.

비트는 binary digit의 줄임말로 이진 숫자라는 뜻이다.

정보를 저장하고 연산을 수행하기 위해 컴퓨터는 비트 측정 단위를 사용한다.

0과 1, 두 가지 값만 가질 수 있는 측정 단위이며, 여러 비트들을 나타냄으로써

두 가지의 값만을 가지고도 많은 양의 정보를 저장할 수가 있다.

하나의 비트는 0과1 두가지 값만 저장이 가능하다 했고, 위에서 말했던 On Off랑 같다

On = True (켜짐), Off = False(꺼짐)

하지만 비트 하나로는 많은 양의 데이터를 표현하기 힘들다.

그렇기 때문에 여러 숫자 조합을 컴퓨터에 나타내기 위해 비트열을 사용한다.

바이트는 여덟게의 비트가 모여 만들어진 것이다.

0000 0000 8bit 또는 1byte

하나의 바이트에 여덟 개의 비트가 있고, 비트 하나는 0과 1로 표현될 수 있기 때문에

2^8 = 256 개의 서로 다른 바이트가 존재할 수 있다.

스크린샷 2021-01-11 오후 6 22 17


아스키코드 & 유니코드

위에서 알아본 2진법으로 우리는 숫자뿐만 아니라 문자, 이미지, 사운드 등을 표현할 수 있다.

알파벳 또는 한글, 우리가 키보드로 타이핑 하는 모든 것들

픽셀 하나하나를 RGB색깔로 표현해서 사진을 만들고, 사진들을 합쳐서

움직임을 표현 할 수 있는 즉 동영상을 만들 수도 있다.

문자를 표현하기 위해서는 전세계가 수십년전 모여 만든 약속(표준)이 있다.

그것이 바로 아스키코드(ASCII)이다.

American Standard Code for Information Interchange의 줄임말로

총 128개의 부호로 정의되어 있는데, 가령 알파벳 A는 10진수 기준으로 65, 알파벳 B는 66로 되어있다.

아스키코드에서 알파벳 A는 65로 정의되어 있다. 그럼 65를 이진법으로 표현하면??

이진법 ( 1000001 ) 2^6x1 + 2^5x0 + 2^4x0 + 2^3x0 + 2^2x0 + 2x0 + 1x1

하지만 아스키코드만으로는 문자들을 표현하기에 충분하지 않았다.

그래서 더 많은 비트를 이용한 유니코드(Unicode)가 등장했다.

유니코드로는 알파벳과 10진수의 표현뿐만이 아니라 이모티콘도 표현하게 해주었다.

😂 이 이모티콘을 10진법으로 하면 123,514 이다.

이진법으로 나타내면 11111011000000010이다. 누군가에게 이 이모티콘을 보내게되면

우리는 위의 이진법 0과1의 패턴으로 전송을 하게되어 받는 사람은 0과 1의 패턴으로 이모티콘이 보여진다.

그림은 RGB (Red, Green, Blue)값으로 표현된다.

각각의 하나의 픽셀을 RGB 세가지 색상의 다른 비율로 특정한 색을 갖게 된다.

음악 또한 음표를 숫자로 표현하여 소리를 구현할 수 있게 되었다.


알고리즘

위키백과에 따르면 알고리즘은 수학과 컴퓨터 과학, 언어학 또는

관련 분야에서 어떠한 문제를 해결하기 위해 정해진 일련의 절차나 방법을

공식화한 형태로 표현한 것, 계산을 실행하기 위한 단계적 절차를 의미한다.

아까 글의 위에서 입력(input)과 출력(output)에 대해서 알아보았다.

스크린샷 2021-01-13 오후 4 04 34

2진수를 배웠고 0과 1로 입력한 값이 출력이 된다.

알고리즘은 입력에서 받은 자료를 출력 형태로 만드는 처리과정을 뜻한다.

계산을 실행하기 위한 단계적 절차를 말이다.

아주 간단한 예로 라면을 끓이기 위한 방법을 나열에 보자.

라면, 건더기스프, 양념스프, 수도꼭지, 라면냄비, 가스레인지, 젓가락, 달걀, 기타 자신만의 노하우가 담긴 재료 혹은 도구

  1. 라면냄비를 든다
  2. 수도꼭지로 가져간다.
  3. 수도꼭지를 튼다.
  4. 300ml가 채워지면 물을 끈다.
  5. 라면냄비를 가스레인지 위에 올린다.
  6. 가스레인지 불을 킨다.
  7. 물이 끓기 시작하면 건더기스프 & 양념스프를 넣는다.
  8. 라면을 넣는다.
  9. 달걀을 넣는다.
  10. 2분이 지나면 젓가락으로 휘휘 저어준다.
  11. 가스레인지 불을 끈다.

알고리즘의 조건(특성)으로는 다섯가지가 있다.

알고리즘 특성  
입력 0개 이상의 외부입력데이터가 존재해야 한다.
출력 하나 이상의 결과가 나와야 한다.
명확성 모든 명령들은 모호하지 않고 단순 명확 해야 한다.
유효성 모든 명령은 실행 가능 해야한다.
유한성 한정된 수의 단계 후에 반드시 종료 해야 한다.

알고리즘의 구조(요소)는 세가지가 있다.

알고리즘의 구조  
Sequence 순차적으로 프로그램 코드를 수행 한다.
Decision(selection) 특정 조건에 따라 수행을 달리 한다
Repetition 수행을 1회 이상 반복 한다.

알고리즘이 짜여질 때는 수많은 문법들이 존재한다.

예를들면 함수가 존재하고 그 안에 조건이 들어간다. Condition

조건에 답하기 위해서 예, 아니오로 대답하기위해 Bool값이 들어간다. True false

또 특정 내용을 반복하기위해 반복(loop)도 포함될 수 있다.

Tags:

Categories:

Updated:

Comments