컴퓨팅 사고력 기르기 (심화 편) (1)

productuidev·2022년 8월 15일
2

IT/CS 지식 쌓기

목록 보기
18/24
post-thumbnail
post-custom-banner

컴퓨팅 사고력 기르기 (심화 편) (1)

개발자란?

세상의 문제를 코딩(기술)으로 해결하는 사람이라고 할 수 있다. 하지만 개발자가 하는 일의 범위는 아래와 같이 넓다. 코딩을 실제로 잘하려면, 언어를 배운다고 해결되는게 아니라 수학적 능력, 논리적 사고력 협업 능력 등이 필요하다.

컴퓨팅 사고

컴퓨터(사람이나 기계)가 효과적으로 일을 수행할 수 있도록 문제를 정의하고, 그에 대한 답을 기술하는 것이 포함된 사고 과정 일체

인형뽑기
인형뽑기 기계를 본다 → 달려간다 → 천원을 넣는다 → 천원을 잃는다
사람은 이해할 수 있지만 기계는 이해하지 못한다. 그러기에 기계가 효과적으로 이해할 수 있도록 개발자가 문제에 접근하기 (레버를 오른쪽으로 돌린다, 레버를 왼쪽으로 돌린다 등)

컴퓨팅 사고를 위한 방법

클린코드
모든 컴퓨터 프로그래밍은 3가지 키워드로 이루어진다.

  • 순차 : 코드는 순차적으로 읽힌다.
  • 분기 : 조건문 (if, while문)
  • 반복 : for문

출처

모두를 위한 컴퓨터 과학 (CS50)

하버드대학의 최고 인기강좌, 데이비드 말란 교수님의 CS50입니다. 프로그래밍을 처음 공부하는 비전공자 분들도 쉽고 재미있게 학습하실 수 있습니다.
boostcourse 바로가기
https://m.boostcourse.org/cs112/

2진법

컴퓨터 과학은 문제 해결에 대한 학문이다. 문제 해결은 입력(input)을 전달받아 출력(output)을 만들어내는 과정입니다. 그 중간에 있는 과정이 바로 컴퓨터 과학입니다.

이러한 입력과 출력을 표현하기 위해선 우선 모두가 동의할 약속(표준)이 필요합니다. 따라서 컴퓨터 과학의 가장 첫 번째 개념은 어떻게 표현하는지에 대한 표현 방법입니다.

  • 2진법 : 0과 1로만 데이터를 표현

  • 1x100 + 2x10 + 3x1 = 123
  • 자리수를 10의 거듭제곱으로 표현

  • 2진법은 전기를 통해 연산하는, 즉 전기를 켜고 끄는 방식으로 작동하는 컴퓨터에게 적합한 방법이다. 컴퓨터에는 굉장히 많은 스위치(트렌지스터)가 있고 on/off 상태를 통해 0과 1을 표현한다.
  • 비트(bit) : binary digit의 줄임말. 0과 1, 두 가지 값만 가질 수 있는 측정 단위
  • 바이트(byte) : 여덟 개의 비트가 모여 만들어진 것. 하나의 바이트에 여덟 개의 비트가 있고, 비트 하나는 0과 1로 표현될 수 있기 때문에 2^8 = 256 개의 서로 다른 바이트가 존재할 수 있다.

정보의 표현

문자의 표현

  • ASCII(아스키코드/American Standard Code for Information Interchange)
  • 총 128개의 부호

A를 지난 강의에서 배운 2진법으로 표현한다면?

  • 10진법 : 65이므로 26x1 + 25x0 + 24x0 + 23x0 + 22x0 + 2x0 + 1x1 (64+1)로 표현
  • 2진법 : 1000001

Unicode

😂(기쁨의 눈물) 이모티콘

  • 10진법 : 128,514
  • 2진법 : 11111011000000010

그림, 영상, 음악의 표현

그림 : RGB (Red, Green, Blue)

  • 빨간색, 초록색, 파란색
  • 픽셀 : 각각의 픽셀은 세 가지 색을 서로 다른 비율로 조합하여 특정한 색을 갖게 된다. 예를 들어 빨간색 72, 초록색 72, 파란색 33을 섞게 되면 노란색이 되는 것과 같은 방식이다.

영상 : 수많은 그림을 빠르게 연속적으로 이어 붙여놓은 것이기 때문에 숫자로 표현 가능
음악 : 각 음표를 숫자로 표현 가능

알고리즘

알고리즘은 입력(input)에서 받은 자료를 출력(output)형태로 만드는 처리 과정

즉, 알고리즘이란 입력값을 출력값의 형태로 바꾸기 위해 어떤 명령들이 수행되어야 하는지에 대한 규칙들의 순서적 나열을 말한다.

전화번호부에서 Mike Smith 찾기

1) 정확한 알고리즘 방식

- 전화번호부를 집어 들고 첫 페이지를 펼친 후
  Mike Smith가 그 페이지에 있는지 찾는다.
- 없으면 그 다음 페이지에서 찾는다.
- Mike Smith를 찾을 때까지 혹은
  전화번호부가 끝날 때까지 이것을 반복한다.
- 하지만 언젠가는 Mike Smith가 전화번호부에 있다면
  이 알고리즘을 통해 Mike Smith를 찾을 수 있을 것이다.

이 방식의 문제점
한 번에 한 페이지씩 보는 알고리즘은 정확하지만, 매우 오래걸리고 비효율적인 알고리즘일 것이다. 한 번에 두 페이지를 넘기게끔 하여 알고리즘을 개선할 수 있다.

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

- 먼저, 전화번호부 가운데를 폅니다.
- 만약 Mike Smith가 그 페이지에 있다면 우리 알고리즘은 끝난다.
- 없다면, 전화번호부가 이름순으로 정렬되어 있으므로
  우리는 Mike Smith가 지금 페이지보다
  앞부분에 있는지 뒷부분에 있는지 알고 있다.
- 그러므로 책의 절반을 버릴 수 있게 되고
  나머지 절반에 대해 똑같은 알고리즘을 수행한다.
- 한 페이지가 남을 때까지 계속 수행한다.
- 마지막에 남은 한 페이지에는 Mike Smith의
  이름이 있거나 없거나 둘 중 하나이다.

이 방식이 개선된 방식인 이유
기존 전화번호부가 100페이지고, 100페이지가 또 추가되어 200페이지가 되었다고 생각해보자.
한장 한장 넘기는 첫 번째 알고리즘은 100번의 페이지를 더 넘겨야 하지만, 절반씩 줄어드는 두 번째 알고리즘은 단 1번의 절차만 더 수행하면 된다. 단 한 번의 동작으로 200페이지의 반인 100페이지가 사라지기 때문이다.

의사코드

위와 같은 알고리즘은 아래와 같은 의사코드라는 방식으로 보다 명료하게 정리할 수 있다. 의사코드는 필요한 행동이나 조건을 잘 설정하여 컴퓨터가 수행해야 하는 일을 절차적으로 파악할 수 있게 도와준다.

함수(functions)

함수는 컴퓨터에게 이 경우에는 사람에게 무엇을 할지 알려주는 동사와 같다.

조건(conditions)

여러 선택지 중 하나를 고르는 것

참/거짓(boolean)

답이 Yes(예) 또는 No(아니오) 혹은 True(참) 또는 False(거짓)으로 나오는 아니면 2진법에서 0또는 1로 나오는 질문을 뜻한다.

반복순환(loop)

여러분의 뇌는 알고리즘을 풀 수 있습니다


알고리즘은 크고 작은 문제들을 해결하는 수학적인 방법입니다. 컴퓨터는 알고리즘을 끊임없이 사용하지만 사람들 또한 문제 해결에 알고리즘을 사용합니다. 데이비드 J. 말란은 알고리즘이 겉보기에 간단한 상황에서 어떻게 사용되는지 또 복잡한 상황에서는 어떻게 사용되는지를 설명합니다.

생각해보기

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

profile
필요한 내용을 공부하고 저장합니다.
post-custom-banner

0개의 댓글