호우동의 개발일지

Today :

article thumbnail
[C#] SortedSet으로 우선순위 큐 쉽게 구현하기 ( + 다익스트라)

왜 필요할까? C#에서 우선순위큐(Prirority_Queue)는 NET 7에 새로 생겼다. 이게 문제가 되는 이유는 대표적인 알고리즘 풀이 사이트(백준, 프로그래머스)가. NET 7 하위 버전이다. 즉, C#으로 알고리즘을 풀 때 우선순위 큐를 사용할 수 없다는 소리다. SortedSet SortedSet에 대해 자세히 다루는 포스팅은 아니기 때문에 우선순위 큐 구현에 필요한 핵심만 말하겠다. SortedSet은 내부의 요소가 자동적으로 정렬된다. 이때 중복 요소는 허용되지 않는다. 원시타입(string, int) 같은 경우, 정렬 기준을 만들지 않으면 자동으로 오름차순으로 정렬되지만 컬렉션, 배열 등은 무조건 IComparable 혹은 IComparer를 통해 정렬 기준을 만들어야 한다. Sorted..

article thumbnail
[C/C++] 이진탐색 - lower_bound, upper_bound 구현

구현해 보는 이유 C++ 헤더 에 lower_bound와 upper_bound 함수가 있다. 근데 있는 거 두고 굳이 왜 직접 구현해 보는 걸까? 이유는 총 2가지이다. 1. 학습적인 목적(이진탐색 구현) 2. 이진 탐색 변형 이 목적으로 한번 구현해 본다. lower_bound와 upper_bound 메서드 lower_bound lower_bound는 찾고자 하는 값보다 크거나 같은 값이 처음 나타난 곳의 인덱스를 반환한다. 예를 들어서, {2,4,6,7,9}에서 lower_bound를 사용하여 2를 찾는다면 배열에서 2의 인덱스인 0을 반환한다. 또한 5를 찾는다면, 처음으로 5보다 큰 6의 인덱스인 2를 반환한다. upper_bound upper_bound는 찾고자 하는 값보다 큰 값이 처음 나타난..

article thumbnail
[C++] 정렬(sort) 정렬 규칙을 직접 만드는 compare의 필요성과 사용법

정렬(sort) - compare C++에서 자주 쓰이는 기능 중, 헤더 안에 있는 sort 기능이 많이 쓰인다. 해당 함수는 벡터(vector)나 배열과 함께 사용한다. 아래는 사용법 예시이다. #include #include // sort 헤더파일 #include // 벡터 헤더파일 using namespace std; int array_size = 8; int main(){ int array[] = {4,5,2,1,5,1,74,5}; vector arr = {4,5,2,1,5,1,74,5}; sort(arr.begin(),arr.end()); sort(array,array+array_size,greater()); for(int i = 0; i < arr.size(); i++) { cout

article thumbnail
[C++] 편리한 문자열 분리(split) 방법(istringstream vs stringstream)

백준에서 알고리즘 문제를 풀다 보면 띄어쓰기나 특정 단어를 기준으로 분리해야 할 때가 있다. 나도 그런 일이 잦아서 사용하기 편한 라이브러리 함수들을 쓰려고 하는데, 이상하게 Split 관련 부분은 항상 헷갈려서 검색을 하게 된다. 그래서 이번 기회에 블로그에 확실히 정리하려고 한다. istringstream #include 헤더를 포함시키면 사용 가능 문자열 format을 파싱(parsing)할 때 쓰는 클래스이다. 문자열에서 필요한 값을 추출하고 공백과 '\n'을 무시한다. 코딩 테스트에서 활용 #include #include using namespace std; int main(){ string str1 = "This is Test"; string str2 = "AB/CDE/DFDG/ASCD"; /..