컴퓨터 과학은 문제 해결에 대한 학문
문제 해결은입력(input)을 전달받아출력(output)을 만들어내는 과정
그 중간에 있는 과정이 바로 컴퓨터 과학
이러한 입력과 출력을 표현하기 위해선 우선 모두가 동의할 약속(표준)이 필요
2진법
컴퓨터는 신기하게도 오로지 0과 1만으로 숫자 뿐만 아니라 글자, 사진, 영상, 소리 등을 저장|
2진법에서는 두 개의 숫자만 있으므로 각 자리수가 2의 거듭제곱을 의미
컴퓨터에는 많은 스위치(트렌지스터)가 있고on/off 상태를 통해 0과 1을 표현하므로 2진법은 컴퓨터에게 적합한 방식
데이터 단위
컴퓨터는 2진법에서 하나의 자릿수를 표현하는 단위를 비트(bit)라고 합니다. 비트는 이진 숫자라는 뜻을 가진 “binary digit”의 줄임말입니다. 디지털 데이터를 여러 비트들로 나타냄으로써 두 가지 값만을 가지고도 많은 양의 정보를 저장할 수 있습니다. 또한 컴퓨터는 저장되어 있는 데이터를 수정하기 위해 비트에 수학적 연산을 수행할 수 있습니다.
하지만 비트 한 개는 많은 양의 데이터를 나타내기에 턱없이 부족합니다. 그렇기 때문에 여러 숫자 조합을 컴퓨터에 나타내기 위해 비트열을 사용합니다. 바이트(byte)는 여덟 개의 비트가 모여 만들어진 것입니다. 하나의 바이트에 여덟 개의 비트가 있고, 비트 하나는 0과 1로 표현될 수 있기 때문에 2^8 = 256 개의 서로 다른 바이트가 존재할 수 있습니다.
문자의 표현
컴퓨터가 스위치를 ON/OFF하면서 2진법을 통해 숫자를 표현한다고 했습니다. 그럼 과연 문자는 어떻게 표현할까요?
바로 문자를 숫자로 표현 할 수 있도록 정해진 약속(표준)이 있습니다. 그 중 하나는 설명미국정보교환표준부호 ASCII(아스키코드/American Standard Code for Information Interchange) 입니다.
총 128개의 부호로 정의되어 있는데, 가령 알파벳 A는 10진수 기준으로 65, 알파벳 B는 66로 되어있습니다.
우선 10진법 기준으로 65이므로 26x1 + 25x0 + 24x0 + 23x0 + 22x0 + 2x0 + 1x1 (64+1)로 표현할 수 있습니다.
따라서 A를 2진법로 표현하면 1000001 입니다.
이 외에도 Unicode라는 표준에서는 더 많은 비트를 사용하여 더 다양한 다른 문자들도 표현가능 하도록 지원하고 있습니다. ASCII로는 문자들을 표현하기에 충분하지 않았기 때문입니다. Unicode는 😂(기쁨의 눈물) 이런 이모티콘 까지 표현할 수 있게 해주었습니다. 이 이모티콘은 10진법으로 128,514입니다. 2진법으로는 11111011000000010 입니다.
그림, 영상, 음악의 표현
문자와 같이 그림도 역시 숫자로 표현할 수 있습니다. 스크린의 그림을 자세히 살펴 보면 수많은 작은 점들이 빨간색, 초록색, 파란색을 띄고 있습니다. 이런 작은 점을 픽셀이라고 부릅니다. 각각의 픽셀은 세 가지 색을 서로 다른 비율로 조합하여 특정한 색을 갖게 됩니다. 예를 들어 빨간색 72, 초록색 72, 파란색 33을 섞게 되면 노란색이 되는 것과 같은 방식입니다.
이 숫자들을 표현하는 방식을 RGB(Red, Green, Blue)라고 합니다. 즉, 노란색의 커다란 이미지는 72 73 33 으로 정의되는 무수히 많은 픽셀들의 RGB코드(숫자)로 표현할 수 있습니다. 영상 또한 수많은 그림을 빠르게 연속적으로 이어 붙여놓은 것이기 때문에 숫자로 표현이 가능합니다. 음악도 마찬가지로 각 음표를 숫자로 표현할 수 있습니다
알고리즘이란?
숫자, 글자, 색깔 등을 컴퓨터가 이해할 수 있는 2진법으로 표현한 것을 확인했습니다. 이 것들은 입력(input)에 해당하는 것입니다.
알고리즘은 입력(input)에서 받은 자료를 출력(output)형태로 만드는 처리 과정을 뜻합니다. 즉, 알고리즘이란 입력값을 출력값의 형태로 바꾸기 위해 어떤 명령들이 수행되어야 하는지에 대한 규칙들의 순서적 나열입니다.
이러한 일련의 순서적 규칙들을 어떻게 나열하는지에 따라 알고리즘의 종류가 달라집니다.
같은 출력값이라도 알고리즘에 따라 출력을 하기까지의 시간이 다를 수 있습니다. 알고리즘의 평가할 때는 정확성도 중요하지만, 효율성도 중요합니다.
의사 코드
알고리즘은 의사코드라는 방식으로 보다 명료하게 정리할 수 있습니다. 의사코드는 필요한 행동이나 조건을 잘 설정하여 컴퓨터가 수행해야 하는 일을 절차적으로 파악할 수 있게 도와줍니다.
- 전화번호부를 집어 든다
- 전화번호부의 중간을 편다
- 페이지를 본다
- 만약 Mike Smith가 페이지에 있으면
- Mike Smith에게 전화한다.
- 그렇지 않고 만약 Mike Smith가 앞 페이지에 있으면
- 앞 페이지의 절반을 편다
- 3번째 줄부터 다시 실행한다
- 그렇지 않고 만약 Mike Smith가 뒷 페이지에 있으면
- 뒷 페이지의 절반을 편다
- 3번째 줄부터 다시 실행한다
- 그러지 않으면
- 그만둔다
노란색으로 강조된 부분들은 앞으로 함수(functions)로 불립니다.
함수는 컴퓨터에게 이 경우에는 사람에게 무엇을 할지 알려주는 동사와 같습니다.
다음으로 노란색으로 강조된 부분들은 조건이라고 부를 것입니다.
이 것은 여러 선택지 중 하나를 고르는 것입니다.
앞서 말한 결정을 내리기 위한 질문이 필요합니다. 이것을 불리언(Boolean)이라고 합니다.
답이 Yes(예) 또는 No(아니오) 혹은 True(참) 또는 False(거짓)으로 나오는 아니면 2진법에서 0또는 1로 나오는 질문을 뜻합니다.
마지막으로 노란색으로 강조된 부분은 루프(loop)라고 합니다.
이 것은 뭔가를 계속해서 반복하는 순환입니다.
내용 출처 : boostcourse 모두를 위한 컴퓨터 과학 (CS50 2019)
'STUDY 기록 > CS50' 카테고리의 다른 글
[CS50] 16진수, 메모리 주소, Malloc, SWAP, 파일 읽고 쓰기, 파일 형식 확인 (0) | 2022.06.23 |
---|---|
[CS50] 선형 검색, 이진 검색, Big O & Ω 표기법, 버블 정렬, 선택 정렬, 재귀, 병합 정렬 (0) | 2022.06.21 |
[CS50] 메모리, 전역 변수, 동적 선언 및 저장, 명령행 인자, 배열 (0) | 2022.06.21 |
[CS50] 전처리,컴파일링,어셈블링,링킹, 디버깅 방법 (0) | 2022.06.21 |
[CS50] C언어 기초, 형식 지정자, 사용자 정의 함수, 하드웨어의 한계 (0) | 2022.06.21 |
댓글