https://sarah950716.tistory.com/16?category=598483 1) (최솟값을 구하는 경우) 최솟값이 x라면, x이상의 값에 대해서는 모두 조건을 만족 2) (최댓값을 구하는 경우) 최댓값이 x라면, x이하의 값에 대해서는 모두 조건을 만족 1) 2)와 같이 연속적으로 조건을 만족한다면 이분탐색을 이용해 만족하는 변수값을 구할 수 있다
Union-find라고도 불리는 서로소 집합 알고리즘으로 두 노드가 같은 집합에 있는지 여부를 판별할 수 있다 Disjoint-set 문제는 두 노드의 연결 상태를 주고 마지막에 여부를 묻는다 부모를 집합의 가장 작은 번호로 기입한 후 재귀적으로 두 노드를 탐색해서 부모를 알아내고 비교할 수 있다 int getparent(int idx) { if(parent[idx] == idx) return idx; else parent[idx] = getparent(parent[idx]); } void uniongroup(int a, int b) { int ap = parent(a); int bp = parent(b); if(ap < bp) parent[bp] = ap; else parent[ap] = bp; }
우선순위 큐를 정렬하는 방법을 알아야 한다 삽입과 삭제는 O(logN)의 시간이 걸린다 문제: https://www.acmicpc.net/problem/11286 https://github.com/surinoel/boj/blob/master/11286.cpp
먼저 우선순위 큐는 보통 힙의 구조를 가지는 비선형 자료구조다. 배열로 구성할 경우엔 1. 자료의 낭비 2. 삽입에서 시간을 크게 잡아먹는다. 또한 연결리스트로 구성할 경우에도 삽입 시간이 배열과 같기에 더 낫다. 따라서 logN의 시간으로 삽입과 삭제를 할 수 있는 힙의 구조로 우선순위 큐를 작성할 수 있다 그래서 priority_queue에 우선순위를 줘야 하는데 기본적으로 우선순위는 큰 값이 높게 설정되어 있다 따라서 큰 수부터 출력하고 싶으면 우선순위 큐를 선언만하고 사용하면 된다 문제: https://www.acmicpc.net/problem/11279 https://github.com/surinoel/boj/blob/master/11729.cpp 하지만 특정한 구조체에서는 각기 다른 경우의 수..
심화 정렬문제 문제: https://www.acmicpc.net/problem/1431 https://github.com/surinoel/boj/blob/master/1431.cpp
RS232C와 UART의 신호 레벨은 차이가 있다. 따라서 시리얼 통신 환경에서 신호 레벨을 변환해줘야 하는 장치가 필요하다. 하지만 최근에 RS232C 포트가 감소하고, USB 포트가 증가하는 추세로 USB/UART 변환 장치가 필요하다. RS232C의 경우 포트 번호인 n은 고정되어 있지만, USB를 통해 지원되는 시리얼 포트는 n이 가변적이다