TAG

#CS

18 posts

느릴 때 무엇부터 의심하나 - 길 고르기 한 장

CS · Algorithm

느릴 때 무엇부터 의심하나 - 길 고르기 한 장

이 시리즈에서 낸 길들을 한 장에 놓는다. 그리고 실제로 코드가 느릴 때 무엇부터 의심해야 하는지, 그 순서가 왜 알고리즘부터가 아닌지.

문제를 어떻게 푸나 9편

그리디 - 지금 제일 좋아 보이는 것

CS · Algorithm

그리디 - 지금 제일 좋아 보이는 것

앞뒤 안 재고 매 순간 최선을 고르는 방법. 빠르고 코드도 짧은데, 언제 맞는지는 짐작이 아니라 증명으로만 알 수 있다.

문제를 어떻게 푸나 8편

동적 계획법 - 한 번 푼 것은 다시 안 푼다

CS · Algorithm

동적 계획법 - 한 번 푼 것은 다시 안 푼다

이름이 어렵지 하는 일은 하나다. 계산한 값을 적어두고 다시 묻지 않는 것. 대신 적어둘 자리를 내줘야 하고, 진짜 어려운 건 무엇을 적을지 정하는 일이다.

문제를 어떻게 푸나 7편

분할 정복 - 쪼개서 풀고 합친다

CS · Algorithm

분할 정복 - 쪼개서 풀고 합친다

쪼개면 왜 빨라지는가. 이득의 출처는 나누기가 아니라 합치기이고, 그 사실을 알면 n log n이 어디서 나오는지도 같이 보인다.

문제를 어떻게 푸나 6편

재귀 - 자기를 부르는 함수

CS · Algorithm

재귀 - 자기를 부르는 함수

재귀는 어려운 기교가 아니라 '같은 모양의 더 작은 문제'를 그대로 코드로 옮긴 것이다. 필요한 건 둘뿐이고, 무너지는 자리도 정해져 있다.

문제를 어떻게 푸나 5편

이진탐색 - 반을 버릴 수 있을 때

CS · Algorithm

이진탐색 - 반을 버릴 수 있을 때

정렬해 두면 한 번 볼 때마다 절반을 통째로 버릴 수 있다. 그 조건이 무엇인지, 그리고 왜 이 짧은 코드가 그렇게 자주 틀리는지.

문제를 어떻게 푸나 4편

정렬 - 줄을 세우는 값과 그 대가

CS · Algorithm

정렬 - 줄을 세우는 값과 그 대가

정렬은 그 자체로 답인 경우보다 다른 일을 싸게 만들려고 하는 경우가 많다. 방식이 갈리는 지점과, 실무에서 진짜로 물어야 하는 안정성 이야기.

문제를 어떻게 푸나 3편

완전탐색 - 다 해보는 것이 기준선이다

CS · Algorithm

완전탐색 - 다 해보는 것이 기준선이다

가장 먼저 떠올려야 할 방법은 전부 해보는 것이다. 무식해서가 아니라, 후보가 몇 개인지를 세어봐야 더 나은 방법이 필요한지 알 수 있어서다.

문제를 어떻게 푸나 2편

알고리즘 - 답이 아니라 답에 이르는 길

CS · Algorithm

알고리즘 - 답이 아니라 답에 이르는 길

알고리즘은 어려운 수학 이름이 아니라 답에 이르는 절차다. 목적지가 같아도 길은 여럿이고, 무엇을 골랐느냐가 걸리는 시간을 정한다.

문제를 어떻게 푸나 1편

무엇을 언제 고르나 - 그릇 고르기 한 장

CS · Data Structure

무엇을 언제 고르나 - 그릇 고르기 한 장

이 시리즈에서 연 그릇들을 한 장에 놓는다. 고르는 순서는 셋이고, 대부분의 문제는 그중 첫 질문에서 끝난다.

자료를 어떻게 담나 9편

그래프 - 관계 자체가 데이터다

CS · Data Structure

그래프 - 관계 자체가 데이터다

노선도에서 값은 역이 아니라 역 사이의 선에 있다. 방향과 가중치와 순환이 갈리는 자리, 그리고 왜 순환을 그렇게 찾아다니는지까지.

자료를 어떻게 담나 8편

힙과 우선순위 큐 - 제일 급한 것만 위로

CS · Data Structure

힙과 우선순위 큐 - 제일 급한 것만 위로

전부 줄 세우지 않고 꼭대기 하나만 약속한다. 덜 약속해서 싸지는 그릇이고, 이름이 같은 메모리의 힙과는 아무 관계가 없다.

자료를 어떻게 담나 7편

트리와 이진탐색트리 - 반씩 접어 들어간다

CS · Data Structure

트리와 이진탐색트리 - 반씩 접어 들어간다

스무고개가 백만 개를 스무 번에 줄이는 원리 그대로다. 다만 질문을 잘못 고르면 스무고개가 하나씩 세는 일이 된다.

자료를 어떻게 담나 6편

해시테이블 - 계산해서 자리를 정한다

CS · Data Structure

해시테이블 - 계산해서 자리를 정한다

찾지 않고 계산한다는 발상 하나로 O(1)이 나온다. 그 대신 충돌을 떠안고, 순서를 잃고, 가끔은 O(1)이 깨진다.

자료를 어떻게 담나 5편

스택과 큐 - 어느 쪽에서 꺼내나

CS · Data Structure

스택과 큐 - 어느 쪽에서 꺼내나

같은 더미인데 꺼내는 자리 하나만 바꿨다. 그 하나가 되돌리기와 작업 큐를 가르고, 스택 오버플로가 왜 나는지도 여기서 설명된다.

자료를 어떻게 담나 4편

배열과 연결리스트 - 자리를 미느냐 고리를 바꾸느냐

CS · Data Structure

배열과 연결리스트 - 자리를 미느냐 고리를 바꾸느냐

중간에 하나 끼워 넣을 때 한쪽은 뒤를 전부 밀고 한쪽은 고리 둘만 바꾼다. 그런데도 실무가 거의 배열을 쓰는 이유까지.

자료를 어떻게 담나 3편

빅오 - 몇 배로 늘어나나

CS · Data Structure

빅오 - 몇 배로 늘어나나

빅오는 어려운 수학이 아니라 늘어나는 모양에 붙인 이름이다. 사람이 두 배로 오면 무엇이 두 배가 되고 무엇이 네 배가 되는지로 읽는다.

자료를 어떻게 담나 2편

자료구조 - 담는 그릇이 속도를 정한다

CS · Data Structure

자료구조 - 담는 그릇이 속도를 정한다

자료구조는 빠른 것과 느린 것으로 나뉘지 않는다. 무엇을 싸게 하고 무엇을 비싸게 할지를 고르는 일이다. 그릇을 가르는 네 가지 질문부터 본다.

자료를 어떻게 담나 1편