[Theme 4] C++ STL
·
[CONCEPT]/[Chapter 2] C++ STL과 몇 가지 자료 구조
1. 자료구조에 대한 이해자료구조란 무엇인가이제 우리는 알고리즘을 공부함에 있어 가장 기저에 해당하는 내용을 모두 학습하였습니다. 그렇다면, 이제 알고리즘을 짜 봐야겠죠! 하지만 그 이전에, 우리는 한 가지를 더 봐야 합니다. 바로 자료구조입니다.자료구조가 뭐냐 싶을 수도 있는데, 자료 구조는 프로그램이 자료를 저장하는 방식을 의미합니다.컴퓨터는 기본적으로 자료를 처리하는 기계입니다. 이 말에 대한 이해가 다소 어려울 수도 있는데, 어떠한 프로그램이든, 문서 파일이든, 컴퓨터에게는 모두 자료입니다. 그래서 자료를 어떻게 저장하고 접근하느냐가 컴퓨터의 입장에서는 굉장히 중요한 요소일 수밖에 없죠.사실 이 글은 프로그래밍 언어(가급적이면 C++)의 문법에 대한 최소한의 이해가 된 사람을 대상으로 쓰는 시리즈..
[Theme 3] 알고리즘의 정당성
·
[CONCEPT]/[Chapter 1] 알고리즘의 시간 복잡도와 정당성
1. 알고리즘의 증명설계한 알고리즘의 설계 의도를 명확히 수행할 것인가?알고리즘을 설계하는 과정에서 위의 질문을 수도 없이 받게 될 것입니다. 과연 내가 설계한 알고리즘은 정확할까? 내가 계산하고자 하는 바를 알고리즘은 정확하게 계산할 수 있는 걸까?사실 조금만 더 생각해 보면 이 문제가 굉장히 골치 아픈 문제인 게, 하나의 알고리즘이 맞는지 확인하기 위해서 몇 가지 test case를 가져와서 검증해 봐도, 이론상 설계 가능한 모든 test case에 대한 정당성이 검증된 게 아니기 때문에, 이러한 방식으로는 알고리즘의 정당성을 검증할 수 없습니다. 여기에 대해 유명한 철학적 이야기로 Devil's Proof, 즉 "악마의 정리"라는 게 있는데, 다음과 같습니다.악마가 존재한다는 것을 증명하는 것은 쉬..
[Theme 2] 알고리즘의 시간 복잡도
·
[CONCEPT]/[Chapter 1] 알고리즘의 시간 복잡도와 정당성
1. 알고리즘의 작동 시간을 늘리는 요소일반적인 과정으로는 시간을 늘릴 수 없다?앞서 우리는, 알고리즘의 의의는 문제를 "해결"함에 있다고 언급한 바 있습니다. 하지만 알고리즘을 필요한 상황에 제때 활용하기 위해서는 알고리즘을 사용할 의의가 있어야 하겠죠? 그래서, 알고리즘을 사용함에 따라 우리는 이득을 볼 수 있어야 합니다. 그 이득은 "문제를 풀어내는 시간"입니다.그러니까 알고리즘의 설계는 문제를 효율적으로 풀어내기 위해 더욱 짧은 시간 안에 문제를 풀어내는 것을 기초로 합니다. 그렇다면, 우리는 어떻게 해야 알고리즘의 작동 시간을 줄일 수 있을까요?사실, 위 질문에 대한 답을 찾기는 쉽지 않습니다. 문제에 따라 풀이 과정이 다르기 때문에, 문제를 더욱 짧은 시간에 풀어내기 위해서는 고려해야 할 사항..
[Theme 1] 알고리즘이란?
·
[CONCEPT]/[Chapter 1] 알고리즘의 시간 복잡도와 정당성
1. 알고리즘이란?알고리즘의 정의앞서, 우리는 머릿말에서 알고리즘의 정의에 대해 짚어본 바 있습니다. 그 정의를 다시 한번 더 생각해 보죠. 수학과 컴퓨터과학에서 사용되는,문제 해결 방법을 정의한 '일련의 단계적 절차'이자어떠한 문제를 해결하기 위한 '동작들의 모임' 즉, 알고리즘은 다음의 세 가지 특징을 가진다고 할 수 있습니다.수학과 컴퓨터과학에서 주로 사용된다.알고리즘은 문제를 해결하기 위해 사용된다.알고리즘은 문제를 해결함에 있어 일정한 형태의 절차를 제시한다.그러니까, 알고리즘은 일상생활의 문제를 해결함에 있어 꼭 필요한 요소라고 할 수 있을 듯 합니다. 그러한 알고리즘이 반드시 갖추어야 할 요소가 있다면, 무엇이 있을까요?알고리즘이 가져야 할 조건필자의 모교는 경희대학교입니다. 경희대학교는 이..
[들어가기 전에]
·
[Prologue]
1. 주제 구성이 시리즈의 주제는 다음과 같이 총 8장으로 구성되어 있습니다.1장 [알고리즘의 시간 복잡도와 정당성]알고리즘을 본격적으로 다루기 이전에, 알고리즘이 무엇인지, 그리고 더욱 효율적이고 정당한 알고리즘을 짜기 위해서는 무엇을 고민해야 할지에 대해 다룹니다.2장 [C++ STL과 몇 가지 자료 구조]C++ Standard Template Library, 약칭 STL에 대해 소개하고, 앞으로 알고리즘을 공부함에 있어 반드시 알아야 할 몇 가지 자료 구조와, 이와 연계되어 실전 PS에서 가장 많이 사용되는 STL들의 문법을 다룹니다.3장 [알고리즘 설계 전략]브루트포스, 다이나믹 프로그래밍, 탐욕적 방법 등 이미 잘 개발되었고 잘 알려진 알고리즘들은 문제를 푸는 과정에서 개발되는 것이 아닌, 채택..
[머릿말]
·
[Prologue]
수학과 컴퓨터과학에서 사용되는,문제 해결 방법을 정의한 '일련의 단계적 절차'이자어떠한 문제를 해결하기 위한 '동작들의 모임' 위키피디아에 "알고리즘"이라고 검색하면위와 같은 문구를 볼 수 있습니다.현재는 알고리즘이라는 학문이단지 개발자를 꿈꾸는 유망한 인재들이직장에 들어가기 위해 공부하는 학문의 인식이 강하지만,위의 문구에서 볼 수 있듯알고리즘은 실제로 우리 생활 속에서 벌어지는여러 가지 상황을 논리적으로 해결하는 데도결정적인 역할을 합니다. 이 점은"알고리즘"이라는 학문이 현재까지도많은 이들에 의해 지속적으로 학습되고 연구되는 이유이기도 합니다.사실 이 블로그를 연재하겠다는 결심은1년 전부터 했었던 것 같습니다.다만 그때는테크 블로그 체계 자체가 익숙하지 않기도 했고,또 PS 문제를 해결하는 것과는 ..