박봉달의 개발생활

[컴퓨터사이언스#1] 컴퓨터가 정보를 표현하는 방법, 2진법 / 문제를 처리하는 과정, 알고리즘 (CS50 2019) 본문

IT/Computer Science

[컴퓨터사이언스#1] 컴퓨터가 정보를 표현하는 방법, 2진법 / 문제를 처리하는 과정, 알고리즘 (CS50 2019)

박봉달 2021. 1. 12. 21:34
728x90

안녕하세요! 박봉달입니다!

컴퓨팅 사고는 무엇일까요? 그리고 알고리즘이란 무얼 의미하는 것일까요?

우리가 코딩을 배우는 이유는 우리가 원하는 것을 컴퓨터에게 명령하여 결과를 얻기 위함입니다.

컴퓨터에게 원하는 작업을 시키기 위해서는 컴퓨터가 생각하는 방식을 이해하는 것이 중요합니다.

그 방식을 이해하려는 사고를 컴퓨팅 사고라고 하는데요, 이 사고를 이해하기위한 첫번째 발걸음이 되겠습니다.

부스트코스 CS50 2019 강의 중 인상깊은 내용을 정리하였습니다.


1. 컴퓨터 과학이란?

컴퓨터 과학은 문제를 해결하는 과정이라고 볼수 있습니다.

문제를 해결하기 위해서는 무언가를 입력하고 전달받아 출력을 만들어내는 과정을 거쳐야 합니다.

그 과정이 바로 컴퓨터 과학이라고 할 수 있습니다.문제 해결을 하기 위해서 컴퓨터에 입력을 하거나, 입력하여 결과를 받아낸 그 출력문을 이해하기 위해서는, 컴퓨터가 이해하는 컴퓨터의 언어인 2진법을 이해해야합니다.

우리가 일상에서 사용하는 10진법은 0부터 9까지 10가지의 기호로 표현하는 진법입니다.

하지만 컴퓨터는 오직 0과 1로만 데이터를 표현합니다. 이것을 2진법이라고 합니다.

출처 : 부스트코스

하지만 신기하게도 컴퓨터는 2진법으로 글자, 사진, 영상, 소리 등을 저장할 수 있습니다.

2진법에선 오직 두 개의 숫자만 있으므로 각 자리수가 2의 거듭제곱을 의미합니다.

이와 같은 2진법은 전기를 켜고 끄는 방식으로 작동하는 컴퓨터에게 적합한 방법입니다.

컴퓨터에는 굉장히 많은 트렌지스터가 있고, on/off 상태를 통해 0과 1을 표현할 수 있습니다.

이를 진실/거짓 또는 0과 1로도 표현할 수 있겠죠.

출처 : 부스트코스

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

비트가 8개가 모이게 되면 바이트(byte)가 되는 것이죠!


2. 비트와 비트열

컴퓨터는 정보를 저장하고 연산을 수행하기위해 비트라는 단위를 사용합니다. 하나의 비트는 0과 1, 이 두가지의 값만 저장할 수 있습니다. 하지만 하나의 비트는 많은 양의 데이터를 표현하기엔 부족하기에 여러 숫자 조합을 나타낼 수 있는 비트열을 사용합니다. 하나의 바이트는 8개의 비트가 모여 만들어진 것으로, 1 비트는 2개의 값을 저장할 수 있으니 2^8 = 256개의 서로 다른 데이터를 만들어낼 수 있습니다.

출처 : 부스트코스


3. 정보의 표현 (ASCII)

컴퓨터를 통해 처리하는 많은 정보들은 어떤 식으로 처리되어 저장되는 것인지 이해하는 게 중요합니다.

컴퓨터가 on/off 되면서 숫자를 표현할 수 있지만 문자를 표현하는 것은 사람으로선 이해하기 어렵습니다. 그렇기에 문자를 숫자로 표현할 수 있도록 사람들은 표준을 만들어 숫자로 문자를 저장하는 것을 약속했습니다.

그것이 바로 아스키코드라고 불리는 ASCII(American Standard Code for Information Interchange)입니다.

이 외에도 다른 언어를 지원하기 위해 더 많은 비트를 사용하여 지원하는 Unicode가 있습니다.

Unicode는 ASCII의 상위호환이라고 볼 수 있습니다.

그렇다면 문자가 아닌 그림, 영상, 음악은 어떻게 처리되어 표현될 수 있을까요?

우리가 스크린을 통해 보는 그림은 RGB로, 빨간색, 초록색, 파란색으로 구성되어 있습니다.

이 작은 점을 픽셀이라고 부르고, 이 세가지 색을 다른 비율로 조합하여 모든 색을 조합할 수 있습니다.

이 숫자들로 색을 표현하는 방식을 RGB라고 합니다.


4. 알고리즘(Algorithms)

알고리즘이란 무엇일까요?

컴퓨터 과학은 입력과 출력과 그 사이에 일어나는 모든 일을 포함하는 것입니다.

알고리즘은 입력에서 받은 데이터를 출력 형태로 만드는 처리 과정을 말합니다. 다른 말로는 문제 해결 과정이죠.

알고리즘이란 정확성도 중요하지만 효율성도 중요합니다.

값을 정확하게 찾을 수 있지만 처리하는 시간이 1년이 걸린다면 효율적이라고 할 수 없죠.

따라서 정확성과 효율성 두마리 토끼를 다 잡을 수 있는 알고리즘이 필요한 것이죠.

출처 : 부스트코스

쉽게 말해서 입력값을 규칙에 맞게 받아들여 처리하고 이에 맞는 출력값으로 만드는 과정이죠.

저는 이것이 사람 사는 것과 비슷하다고 생각합니다.

오늘 하루동안 설거지, 청소, 장보기, 공부하기, 쓰레기 버리러 가기 등을 해야한다면,

집에서 할 수 있는 것은 집에서 다 끝내고, 나가서 해야하는 일들은 나가서 다 끝낸다면

최소한의 시간으로 최대의 효율을 낼 수 있는 것이겠죠.


5. 의사코드 (Psuedo Code)

이러한 알고리즘은 의사코드라는 것으로 보다 명확하게 정리하여 작성할 수 있습니다. 이는 프로그래밍 언어로 정리하기 전에 문자로 작성한 가상의 코드로, 절차적 프로그래밍이라는 규칙이 모든 프로그래밍 언어에 적용되기에 실제 코드를 작성하는데도 큰 도움을 줍니다.

예를 들어 현재 CS50 코칭스터디 2기 과제인

3살 짜리 아이라도 이해하고 실행할 수 있도록 라면 끓이는 방법을 의사코드로 표현해보도록 하겠습니다.

준비물 : 라면, 건더기스프, 양념스프, 수도꼭지, 라면냄비, 가스레인지, 젓가락, 달걀 등

1 라면냄비를 수도꼭지로 가져간다
2 수도꼭지를 연다
3 라면냄비에 물을 채운다
4 If 라면냄비에 물이 500이 있다면 then
    수도꼭지를 잠근다
5 Else 3번으로 돌아간다
6 라면냄비를 가스레인지로 가져간다
7 가스레인지를 켠다
8 기다린다
9 If 물이 끓으면 then
    라면을 투입한다
    건더기스프를 투입한다
    양념스프를 투입한다
10 Else 8번으로 돌아간다
11 젓가락을 가져온다
12 Repeat 젓가락으로 라면을 휘젓는다
    until 시간이 3분이 넘을 때까지
13 달걀을 깬다
14 달걀을 넣는다
15 30초간 기다린다
16 가스레인지를 끈다(끝)

오늘은 컴퓨팅 사고에 대해 첫 걸음을 떼어보았습니다.

컴퓨터는 0과 1로 구성된 전기 신호로 입력을 데이터로 변환하여 처리 및 저장할 수 있고,

숫자를 포함하여 문자, 그림, 영상 및 음성까지 데이터로 변환하여 처리할 수 있었습니다.

그리고 본격적으로 문제 해결을 위해 있어지는 해결과정을 알고리즘이라 이해할 수 있었습니다.

따라서 이번 수업의 핵심은

컴퓨팅 사고 = (입력->알고리즘(과정)->출력) -> 문제해결

으로 이해할 수 있었습니다.

지금 작성하는 이 포스팅이 도움이 되길 바라며 이상 마칩니다.

감사합니다 :)

728x90
반응형