TIL 01 :: [CS50] 컴퓨팅 사고

Heewon·2021년 6월 1일
0

TIL

목록 보기
1/3
post-thumbnail

컴퓨터 과학은 문제해결이 핵심이다!
문제 해결은 입력에서 출력의 과정이고 중간 과정이 컴퓨터 과학

2진법

1) 2진법

우리는 보통 0,1,2... 등 10개의 숫자로 이루어진 10진법을 사용한다.
그러나 컴퓨터에서는 0과 1만을 이용해 데이터를 표현 -> 2진법
이 2진법으로 우리가 컴퓨터에서 볼 수 있는 모든 영상, 소리, 사진, 글 등을 출력해 보여준다.

  • HOW? 🤷‍♀️


우리가 이 숫자를 읽을때 123(백이십삼)으로 읽는데 100의 자리가 1이고 10의 자리가 2, 1의 자리가 3이기에 백이십삼으로 읽는다.
즉, 100X1 + 10X2 + 1X3 = 123
컴퓨터에서 출력하려면 2진법을 통해 나타내므로 2의 거듭제곱을 이용한다.


2진법에서 '11'이라는 숫자는 10진법상 '3'이라는 숫자를 나타낸다.
즉 컴퓨터 언어의 '11' 숫자는 우리에게 출력되어 보여질때(10진법) 3이라는 숫자인 것이다.

💡 컴퓨터에는 굉장히 많은 트렌지스터가 있고 전구처럼 ON/OFF 상태를 통해 0과 1을 표현한다.

쉽게말해서 0 = 사용하지 않는 것, 1 = 사용하는 것.

2) 비트

컴퓨터는 2진법에서 하나의 자릿수를 표현하는 단위를 비트(bit) 라고 한다.
0과 1 두가지 값만 가질 수 있다.

3) 비트열

한개의 비트로는 데이터를 나타내는 것이 부족하기에 비트열을 사용하는데,
바이트(byte) 는 8개의 비트가 모여 만들어짐
1 byte = 8 bit
하나의 바이트에 8개의 비트, 비트 하나는 0과 1로 표현 => 2^8 = 256개의 바이트 존재 가능

4) 다양한 데이터 표현

정보의 표현

1) 문자의 표현

숫자는 스위치 ON/OFF, 문자는 ASCII(아스키코드)

문자를 숫자로 표현 -> ASCII 이하 '아스키코드'
예를 들면, A는 65(10진수)이다.
그러면 A를 2진법으로 표현하면?
알파벳 A = 65(10진수) = 2^6X1 + 2^5X0 + 2^4X0 + 2^3X0 2^2X0 + 2X0 + _1X1 (64+1=65) 즉, 1000001(2진수)

  • 해당 제곱근 자리에 불을 켜서(ON/OFF) 해당하는 수를 각각 더하면 10진수로 표현할 수 있다고 생각하면 쉽다.

아스키코드에 대해 더 알아보고 싶다!

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

스크린을 통해 그림을 자세히 보면 수많은 작은 점들로 이루어져있고 그 점들은 빨간색,초록색,파란색 으로 픽셀 이라고 한다.

숫자로 표현하면 RGB(Red, Green, Blue)
예를 들면 red 72, green 72, blue 33 값은 노란색으로 표현된다.
무수히 많은 픽셀을 rgb코드(숫자)를 통해 나타내면 그림이 보인다.
영상은 수많은 그림을 연속적으로 붙여놓은 것(흔히 '움짤'같은)이기에 숫자로 표현이 가능하다.
음악 또한 음표를 숫자로 표현할 수 있다.

알고리즘

1) 알고리즘

컴퓨터가 이해할 수 있는 2진법으로 표현 = 입력(input)
그렇다면 출력(output)은?


알고리즘은 입력 받은 자료를 출력 형태로 만드는 처리과정이다.

입력 받은 자료가 출력 형태로 바뀌려면 어떤 명령이 수행되어야 하는지에 대한 규칙들의 순서적 나열
-> 출력하기 위한 문제해결법 (컴퓨터에게 하는 지시사항)

2) 정확한 알고리즘

전화번호부에서 Mike라는 사람을 찾는다면?

첫페이지부터 한장씩 넘기면서 Mike를 찾는다. -> 효율성과 정확성이 떨어지고 시간이 오래걸림
알고리즘은 정확성과 효율성이 중요하다 💎

3) 정확하고 효율적인 알고리즘

직관적이고 효율적인 알고리즘을 적용하기 위해
1. 전화번호부의 가운데를 펴고 Mike가 그 페이지에 있으면 알고리즘 종료
2. 없다면, 이름순으로 정렬된 전화번호부에서 가운데 페이지보다 앞부분 혹은 뒷부분을 찾아볼 수 있다.
3. 한페이지가 남을때까지 알고리즘을 수행
마지막 한페이지에서 Mike 이름이 있거나 없는 것을 확인할 수 있다.

한장씩 넘겨서 Mike 이름을 찾는 것보다 효율적이다.
100페이지를 넘겨야하는 것을 두번째 알고리즘을 통해 한번의 절차만 더 수행하면 빠르게 찾을 수 있다.

4) 의사코드

필요한 행동이나 조건을 설정해 컴퓨터가 수행해야 하는 일을 절차적으로 파악할 수 있게 해주는 의사코드

위와 같은 알고리즘은 의사코드로 명료하게 정리할 수 있다.


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

컴퓨터에게 이 경우에 사람에게 무엇을 할지 알려주는 동사 개념의 함수(functions)이다.

선택지중 하나를 골라야하는 조건이다.

결정을 내리기 위한 질문, True or False 불리언(Boolean)이다.
True = Yes = 1, False = No = 0

뭔가를 계속해서 반복순환하는 루프(loop)이다.


더 공부하고 싶다면?

부스트 코스에서 CS50 강의 듣기

profile
https://habitual-history.tistory.com/ ✨

0개의 댓글

관련 채용 정보