[CS50 2019] 1강. Computational Thinking, Scratch - 2

OFFDUTYBYBLO·2021년 11월 11일
0
post-thumbnail

1. Algorithm(알고리즘)은 무엇인가?

문제 해결의 관점에서 보면 알고리즘은 문제를 해결하는 단계적 방법일 뿐이다. 알고리즘이라는 단어가 우리에게 어색한 이유는 많은 기술 아티클이나 영상들에서 머신러닝, AI, 데이터 사이언스 등 알고리즘과 연관된 분야가 뭔가 엄청나고 복잡할 것 같은 느낌을 주기 때문이다.
단지, 알고리즘의 단어적인 의미만 고려하면 알고리즘은 그저 문제를 푸는 방식(순서)일 뿐이다. 우리는 점심시간에 배가 고프면 다양한 방법을 통해서 이를 해결한다. 배달을 시키거나, 음식점에 가서 먹거나, 아니면 포장을 해오던가, 그것도 아니면 다이어트를 이유로 굶기도 한다.
이 과정도 알고리즘이다. 문제를 해결하기 위해서 우리는 사고를 하고 그 사고를 바탕으로 결정을 내린다. 그 어떤 방법을 사용하더라도 문제를 해결한다면, 이는 옳바른 알고리즘이다.

2. 어떤 알고리즘이 더 좋은가? 어떻게 판단하는가?

대부분의 경우 문제 해결은 우리가 이미 가지고 있는 직관이나 생각들을 기계나 다른 사람들이 이해할 수 있는 방식으로 번역하는 것에 불과하다.
우리는 어떠한 문제를 해결하기 위해 각자의 방법으로 사고하고 결정한다. 그렇다면 좋은 문제 해결 방법, 즉 좋은 알고리즘은 무엇일까?

당연히 시간과 노력이 덜 드는 방법일 것이다. 배달의 민족을 예를 들어보자. 배달의 민족이 없던 시절을 생각해보면, 우리는 배달을 시키기 위해서 어떤 식당에 전화를 해서, 그리고 그 전화번호를 찾기 위해서, 그리고 메뉴를 알아내기 위해서 많은 노력과 시간을 투자했었다.

하지만 지금은 어떤가? 핸드폰으로 몇 초만에 내 근처에 있는 수 많은 배달 가게들을 카테고리별, 배송비별, 인기순별로 조회하고 많은 정보를 얻을 수 있다. 우리는 배달의 민족이 제시한 알고리즘을 선택하면 그 전보다 훨씬 빠르고 다양하게 많은 정보에 도달할 수 있고, 우리의 원래 목적인 점심을 먹어야하는 문제를 해결할 수 있다.

시간복잡도

해당 강의에서 시간복잡도를 예시로 문제를 해결하는 과정을 설명했다. 이 부분은 이미 블로깅했기에 넘어간다.

profile
블로그 운영 x

0개의 댓글