프로그래밍/알고리즘

알고리즘 어렵지 않아요

aiemag 2020. 6. 7. 20:30
반응형

 

 알고리즘 관련 글들을 포스팅해보려 합니다.

 

 포스팅의 주목적은 알고리즘의 지식 정리입니다. 저도 항상 공부해야 하는 입장이라 이미 알고 있거나 알아야 하는 내용들 정리가 필요하기 때문입니다.

 

 혹시 '알고리즘은 어려운 것이다'라는 편견을 가지고 계신 분들을 위해 드리고 싶은 말씀은 그저 알고 싶은 만큼만 취하면 어떨까? 입니다. 물론 입시와 입사, 승진을 위해 필요한 일이라면 다르겠지만.. 그냥 세상에 문제를 해결할 수 있는 방법들은 다양하고 뛰어난 방법들을 알면 재미있고 좋다?라고 생각하면 편하게 접근할 수 있지 않을까 합니다.. 하지만 저 역시 피곤하고 어렵습니다 :S

 

 

what the..

 

 알고리즘을 알아야 하는 이유는 컴퓨터 프로그래밍 시 논리적인 사고를 기르고, 문제 해결 능력을 위한 것 같습니다. 앞으로 소개하게 될 내용의 기능적인 관점에서 본다면 알 필요는 없습니다. 요즘은 세상이 좋아져서 웬만한 고수준 언어들은 library라는 것을 지원하기 때문에 그냥 가져다 쓰기만 해도 웬만한 기능은 모두 구현할 수 있습니다.

 하지만 알고 쓰는 것과 모르고 쓰는 것의 프로그램이라는 전체적인 틀의 설계를 좀 더 유연하고 견고하게 할 수 있을 것 같습니다. 예로 닭을 잡는 데 사용하는데 쓰이는 칼이 무엇인지 안다면 소를 잡는 큰 칼을 사용하는 비효율을 피할 수도 있겠네요.

 

 

 

 프로그래밍 언어로 예를 들겠지만 개념 설명도 할 것이기 때문에 비전공자 분들도 어떠한 문제가 어떠한 방법으로 처리되는지 일련의 과정들을 논리적으로 혹은 재미로 익혀두시면 무슨 일을 하던지 체계적으로 할 수 있는 밑바탕을 쌓는데 도움이 될 것 같습니다.

 

 우선 알고리즘이란 무엇일까? 위키백과의 정의는 다음과 같습니다.

 

위키백과, 우리 모두의 백과사전.

 

알고리즘(라틴어독일어: Algorithmus, 영어: algorithm 알고리듬[*], IPA: [ǽlɡərìðm])은 수학과 컴퓨터 과학언어학 또는 관련 분야에서 어떠한 문제를 해결하기 위한 일련의 절차나 방법(finite sequence)을 공식화한 형태로 표현한 것계산을 실행하기 위한 단계적 절차를 의미한다.

알고리즘은 연산, 데이터 진행 또는 자동화된 추론을 수행한다. 산법(算法), 셈법, 계산 절차 등으로 번역되기도 한다.

 

 제가 다루게 될 내용들은 주로 컴퓨터 프로그래밍 관점에서 문제를 해결하기 위한 방법에 관한 내용이고 기본 언어는 C언어로 다루려고 합니다.

 

 딱히 언어를 가리진 않습니다만 과거 C언어를 제일 먼저 배웠고(개취) 다른 언어(python)등에 비해 자료형과 문법이 명확(반대로 얘기하자면 엄격)하고 C++이나 JAVA에 등에 비해 알고리즘 연습을 위한 불필요한 형식(OOP keyword, 방식)의 사용을 피할 수 있어서입니다. 

 

 C언어를 모르셔도, 다른 언어를 사용하셔도 방법의 흐름만 이해하셔도 되기 때문에 포스팅을 보시는데 큰 문제는 없을 것 같습니다.

 

 그럼 다룰 내용이 알고리즘이긴 한데 구체적으로 어떤 내용들을 포스팅을 할 것이냐?

 

 주로 자료구조 또는 문제 해결을 위한 다양한 방법들이 될 것입니다.

 

 1. 자료구조 : 컴퓨터 과학에서 data 처리를 위한 자료의 조직, 관리, 저장하는 방법들을 말합니다.

  배열, 리스트, 스택, 큐, 트리 등이 기본입니다.

 

 2. 문제 해결을 위한 다양한 방법 : 말 그대로 문제 해결을 위한 다양한 방법입니다.

  정렬, 문자열 처리, 해쉬, 탐색, 그래프, 재귀, DP 등 수없이 많은 상황에서의 문제 해결책들이 있습니다.

 

 

C언어 공부에 관심 있으시다면 다음 사이트를 참고하시면 됩니다.

※ 학부시절 독학할 때 참고하였던 사이트인데 아직까지 건재하네요. 제가 알고 있는 c, c++ 강의 사이트 중 최고입니다.

 

http://www.soen.kr/

 

SoEn:소프트웨어 공학 연구소

 

www.soen.kr

 

 장황하게 글을 썼는데, 실제 포스팅의 수준이나 퀄리티나 어느 정도가 될지는 가늠하기 쉽지 않네요. 일단 시작하면서 다듬어 가보려고 합니다^^b

반응형