Java에서 객체를 정렬하려면 어떻게 해야 할까요? 기본적으로 어떤 것을 비교 기준으로 삼을지가 중요하다고 했습니다. Key 2개를 비교하는 compare 기반 정렬이라면. 이는 Quick sort, merge sort, Tim sort 등이 그러합니다. 반면에 Key 2개를 비교하면서 정렬하지 않는 것도 있는데요. 대표적으로 기수 정렬이라던지, Count sort 등이 있습니다. Merge Sort는 잘 보면 Key 2개를 가지고 비교하면서, 정복하는 알고리즘임을 알 수 있어요. 그러면, 우리는 어떠한 두 원소를 비교했을 때 어떤 것이 우선 순위가 더 높은지 정하는 게 중요하다고 했습니다. 그러한 기준이 있는 것들은 따로 비교 기준을 정의하지 않아도 됩니다. 그런데, 이런 경우를 생각해 봅시다. 하고 ..
레퍼런스 검색 결과
c++에서 vector는 ps를 할 때 상당히 많이 쓰는 자료구조입니다. 현업에서는 얼마나 많이 쓸 지 모르겠습니다만, 몰라서 손해를 볼 구조는 아닌 듯 싶습니다. 한 번에 너무 많이 쓰면 내용이 길어질 듯 싶으니, 3편에서 4편에 걸쳐서 쓰도록 하겠습니다. 오늘은, 2차원으로 선언된 2차원 vector를 어떻게 사용해야 하느냐입니다. 보통, 리턴 값이나 파라미터가 강제가 되는 코딩 테스트의 경우, vector 만 나와도 당황할 수 있어요. 오늘은 이것을 어떻게 읽어내고, 만약에 이 2차원 벡터를 리턴해야 할 일이 있을 때 어떻게 해야 되는지만 보도록 하겠습니다. 먼저 읽어내는 것은 그리 어렵지 않습니다. 어짜피 vector의 vector라고 하면, 동적 배열을 담고 있는 동적 배열이기 때문이에요. 이것..
이번 글에서는, C언어 rand 함수와 srand 함수에 대해서 알아보도록 하겠습니다. 이들에 대한 자세한 원리는 추후에 따로 알고리즘이나 이산수학 카데고리에서 다룰 기회가 있을 듯 싶습니다. 먼저, srand는 1번째 인자로 seed 값만을 받습니다. 그리고, rand 함수는 아무런 인자를 받지 않고, 그냥 (유사)난수만 리턴합니다. 사용법은 그리 복잡하지 않은 듯 싶으니, 프로그램을 한 번 실행시켜 보도록 합시다. 먼저, 시드 값을 0으로 주고, rand 함수를 10번 호출해 보았습니다. 그랬더니, 1804289383, 846930886, ... , 1189641421이 나왔음을 알 수 있어요. 프로그램을 여러 번 실행 시켜도 동일한 결과가 나왔습니다. 그것으로 미루어 보았을 때 처음 시드값에 따라서..
생활코딩에 arrays.Copyof 메서드에 대한 질문이 올라왔었습니다. 그런 의미에서 이 함수를 간단하게 보도록 하겠습니다. 먼저, 메서드 이름에서 보면 알 수 있다시피, 배열을 복사하는 함수입니다. 배열의 내용을 다른 array로 복사합니다. 여기까지만 짚고, copyOf의 내용을 간략하게 보도록 하겠습니다. 먼저 primitive 타입이 아닌 배열을 copyOf를 할 때에는 3180번째 줄에 있는 친구가 호출이 됩니다. 그러면, 3181번째의 리턴문이 수행이 될 듯 싶네요. 따라 들어가 보겠습니다. 그러면 위 메소드가 수행이 되는데요. 3항 연산자, arraycopy, 리턴문. 이렇게 3개의 문장으로 구성이 되어 있습니다. 이게 어떻게 수행이 되는지 정확히 모르겠으니, main 클래스를 작성해서 디..
저번에, 왜 equals를 구현하면 왜 hashCode를 같이 구현해야 하는지에 대해서 설명을 했습니다. hash 계열의 자료구조 때문에 그렇다고 했었습니다. 그렇지 않으면 어떻게 동작하는지는 여기를 참고하시면 좋겠습니다. 이 내용에 대해서 숙지하셨다고 가정하고 진행하도록 하겠습니다. 면접 질문에서 간혹 가다가 등장하는지는 잘 모르겠습니다만, 어떠한 객체의 hashCode 값이 같은 것들을 모두 hashSet에 넣을 때, 어떤 일이 벌어지는지는 꽤 중요한 문제 중 하나일 겁니다. 사실, 우리는 그렇게 바보같이 구현할 일이 없습니다. 그렇지만, 저는 이에 대해서 포스팅 하도록 하겠습니다. 먼저 Java 8에서부터, hashMap은 버킷에 8개 이상 달려있을 때, Balanced Tree로 변환이 된다는 것..
최근댓글