Java에서 객체를 정렬하려면 어떻게 해야 할까요? 기본적으로 어떤 것을 비교 기준으로 삼을지가 중요하다고 했습니다. Key 2개를 비교하는 compare 기반 정렬이라면. 이는 Quick sort, merge sort, Tim sort 등이 그러합니다. 반면에 Key 2개를 비교하면서 정렬하지 않는 것도 있는데요. 대표적으로 기수 정렬이라던지, Count sort 등이 있습니다. Merge Sort는 잘 보면 Key 2개를 가지고 비교하면서, 정복하는 알고리즘임을 알 수 있어요. 그러면, 우리는 어떠한 두 원소를 비교했을 때 어떤 것이 우선 순위가 더 높은지 정하는 게 중요하다고 했습니다. 그러한 기준이 있는 것들은 따로 비교 기준을 정의하지 않아도 됩니다. 그런데, 이런 경우를 생각해 봅시다. 하고 ..
전체 글 검색 결과
이 포스트를 어디에 쓸지 고민을 굉장히 많이 하였습니다. OS에 쓸지, 어셈블리 카데고리를 따로 만들어서 써야 할 지, 아니면 C언어에 쓸지. 그런데, 모 사이트에서 가장 많이 질문받은 것 중 하나가 OS의 thread (혹은 Linux의 fork)를 공부하고 있는데 왜 실행 흐름이 이렇게 되나요? 에 대한 질문이 많았습니다. 그렇기 때문에, 일단 OS 카데고리에 작성하도록 하겠습니다. 먼저, pc는 프로그램 카운터입니다. 그러면 이 값을 저장하는 것은, pc register일 거에요. 그러면 뭘 저장할까요? 실행할 기계어 코드의 주소를 저장할 거에요. 아. 벌써 모르는 용어가 3개 나온 거 같아요. 쉽게 설명해 드리겠습니다. 일단, 우리는 기계어를 명령이라고 합시다. 밥 먹어라. 혹은 설거지 해라와 같..
ps를 하시면, 많이 보는 자료구조 중 하나는, Java에서 TreeSet, TreeMap, C++의 STL에서는 Map, Set 등이 있습니다. 균형 트리로 구현이 되어 있다는 이야기는 많이 합니다. 이게 무엇일까? 에 대해서만 간단하게 생각해 보도록 하겠습니다. 필기 시험에 나올 때 상당히 매력적인 보기를 주는 경우도 있으니, 간단하게 개념을 짚고 넘어가시는 것도 좋겠습니다. 이진 트리를 생각해 봅시다. 이것은 기준 노드를 기준으로 그것보다 작으면 왼쪽에, 크면 우측에 옵니다. 그러면 1을 찾기 위해서는 몇 번의 탐색이 필요할까요? 3보다 작으므로 왼쪽으로 갑니다. 2보다도 작으므로 왼쪽으로 갑니다. 그랬더니 1이 있습니다. 3번 탐색하면 됩니다. 그러면 이 트리에서 -5를 찾기 위해서는 어떻게 해야..
c++에서 vector는 ps를 할 때 상당히 많이 쓰는 자료구조입니다. 현업에서는 얼마나 많이 쓸 지 모르겠습니다만, 몰라서 손해를 볼 구조는 아닌 듯 싶습니다. 한 번에 너무 많이 쓰면 내용이 길어질 듯 싶으니, 3편에서 4편에 걸쳐서 쓰도록 하겠습니다. 오늘은, 2차원으로 선언된 2차원 vector를 어떻게 사용해야 하느냐입니다. 보통, 리턴 값이나 파라미터가 강제가 되는 코딩 테스트의 경우, vector 만 나와도 당황할 수 있어요. 오늘은 이것을 어떻게 읽어내고, 만약에 이 2차원 벡터를 리턴해야 할 일이 있을 때 어떻게 해야 되는지만 보도록 하겠습니다. 먼저 읽어내는 것은 그리 어렵지 않습니다. 어짜피 vector의 vector라고 하면, 동적 배열을 담고 있는 동적 배열이기 때문이에요. 이것..
저번 시간에 함수 포인터에 대해서 언급을 했고, clockwise 해석법에 대해서도 간단하게 언급을 했으니, 다소 복잡한 것을 해석해 보도록 하겠습니다. C언어에는 signal 함수가 있는데요. 이것의 선언부만 간단하게 해석해 보도록 하겠습니다. 간단해 보이진 않지만요. 사실 원래는, void (*signal(int,void (*)(int)))(int); 입니다. 먼저, keyword를 찾아봅시다. signal입니다. 그리고 큰 덩어리 하나 찾아봅시다. signal에서 시계 방향으로 돌기 시작했을 때 맨 먼저 만나는 '('과 쌍을 이루는 ')'을 찾아서, 표시를 해 주었는데요. 이 부분은 안쪽에서 해석을 해 보도록 하겠습니다. 먼저, keyword인 signal에서, 오른쪽을 먼저 보니까 ()이 보였습니..
최근댓글