디시인사이드 갤러리

마이너 갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[풀이] 이분탐색 응용 튜토리얼 (연습문제 있음)

biximo갤로그로 이동합니다. 2024.05.04 22:53:50
조회 283 추천 6 댓글 3
														

서론:


최근 재미있고 어려운 문제를 해결했는데, 그 문제에 쓰였던 기법이 상당히 특수한 경우에만 적용이 가능하긴 하지만 최소 한두번은 본 거 같아서 소개 드리려 가져왔습니다.


이분 탐색 응용 기법인데, 이미 이름이 있는 알고리즘인지는 모르겠네요. 본 기법을 소개하기 전에, 다음 문제를 어떤 방식으로 해결할 수 있을지 생각해보세요.


포커스 문제:


정점 N (N <= 1e18)개로 이루졌고, 정점 1이 루트인 트리가 주어진다. 각 정점엔 가중치가 주어지는데, 이 가중치는 자신의 부모의 가중치보다 크거나 같다. 또한, 각 정점의 자식들은 가중치 순으로 정렬되어 있다. 이 트리의 정점들 중에서 가장 작은 가중치를 가진 K (K <= 1e5)개의 정점들을 찾아라.


풀이:


N의 제한이 상당히 크기 때문에 트리를 완전히 탐색하기 어렵습니다. 어떤 식으로 탐색할 수 있을까요? 우선 모든 자식 노드는 부모 노드보다 가중치가 크기 때문에 루트부터 탐색해야 하는 사실은 자명합니다. 하지만 굉장히 큰 트리이기 때문에 어떠한 가중치에 도달 할때까지 탐색한 후엔 그만 돌아가야겠죠. 이 가중치를 너무 작게 설정하면 K개의 값을 미처 찾기도 전에 탐색을 종료하고, 너무 크면 최솟값을 찾지 않고 그냥 임의의 K개의 값을 찾겠죠. 그렇기 때문에 정확히 최솟값 K개를 찾을 가중치의 상한을 이분 탐색으로 찾을 수 있습니다. 


이제 x보다 작거나 같은 가중치를 가진 정점들의 수가 K보다 큰가?를 해결하는 결정문제로 바꾸었습니다. 이는 어떤 식으로 해결할 수 있을까요? 트리의 크기가 작지 않기 때문에 탐색을 하는것도 오래 걸릴 거 같지만 실은 그냥 나이브하게 탐색을 진행해도, K개의 정점을 찾는 순간 탐색을 종료하기만 하면 O(K)에 탐색을 마칠 수 있습니다. 이 시간복잡도는 쉽게 설명이 가능합니다. 한번 탐색을 진행할때마다 찾은 x 이하의 정점은 하나 늘어나기 때문에 D번 총 탐색하고, 각 탐색중 불필요하게 반복하는 연산은 최대 1번–자식들을 순회하는 작업 중 자식의 가중치가 x 이상인 경우–이기 때문에 O(K)에 결정문제를 해결 할 수 있습니다. 


이분탐색을 진행하기 때문에 O(K log X)에 전체문제를 해결 할 수 있습니다. 


결론:


이러한 풀이는 일반화하기 쉬워요. 탐색 범위가 굉장히 크지만 실제로 찾아야 하는 도착점이 작다면 쉽게 적용되는 기법이죠. 밑에 쉬운 문제부터 어려운 순으로 연습 문제 몇개를 소개할게요.


연습 문제:


https://www.acmicpc.net/problem/21788


https://www.acmicpc.net/problem/14166


https://www.acmicpc.net/problem/19616

추천 비추천

6

고정닉 2

3

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
2872 설문 연예인 안됐으면 어쩔 뻔, 누가 봐도 천상 연예인은? 운영자 24/06/17 - -
44906 공지 피갤컵 call for tasks를 진행합니다! [7] 나는최고갤로그로 이동합니다. 24.05.22 797 16
44466 공지 [ps 정보글 모음집] [2] 나는최고갤로그로 이동합니다. 24.05.07 950 13
44058 공지 알고리즘 대회 공부 과정 [22] 나는최고갤로그로 이동합니다. 24.04.20 2756 31
19170 공지 규칙 v2022.02.16 [8] 0xrgb갤로그로 이동합니다. 22.02.06 6839 36
1 공지 와 PS! [24] 0xrgb갤로그로 이동합니다. 18.05.28 21966 30
45689 일기 3주차 마라톤 완 ㅇㅇ(182.215) 02:45 42 1
45688 일반 lcs 6을 풀다가 ㅇㅇ(106.101) 02:10 51 0
45687 일반 sort() 빼먹은거 6시간 뒤에 찾음.. ㅇㅇ(27.35) 00:44 82 0
45686 일반 코테준비할때 솔브닥 많이푼 순서대로 푸는거 어케생각함? [9] ㅇㅇ(221.145) 06.19 164 0
45685 일반 200문 풀었다 ㅇㅇ(123.214) 06.19 91 0
45684 일반 아이돌이 말아주는 C++ [3] ㅇㅇ(24.30) 06.19 221 2
45683 일반 개발로 먹고 살려면 java도 시작해봐야 하나 [10] ㅇㅇ(223.39) 06.19 235 0
45682 일기 당분간 골1 이상 문제 안풀어야지 [7] ㅇㅇ(223.39) 06.19 252 0
45681 일반 PS만 하고 개발 안해봤는데 뭐부터 시작해야함 [8] ㅇㅇ(218.48) 06.19 282 0
45680 일반 아니 나 아이템 하나도 산 거 없는데 프리즈 왜 써짐? [1] ㅇㅇ(1.227) 06.19 196 0
45679 일반 기여 주기 무섭네요 [13] ㅇㅇ(112.217) 06.19 328 0
45678 일반 솔브드 마라톤 태그 제외기능은 없나요? [5] ㅇㅇ(118.235) 06.19 186 0
45677 질문 세그 트라이 위상정렬 등 다들 어느정도때 배움? [9] ㅇㅇ(118.235) 06.19 221 0
45676 일반 아무 생각없이 변수명 지어서 제출했는데 [4] ㅇㅇ(182.215) 06.19 381 3
45675 일반 pccp이런것도 있네 [2] ㅇㅇ(106.101) 06.19 176 0
45674 일기 마라톤 3주차 [4] Bubbler갤로그로 이동합니다. 06.19 247 0
45673 일반 ktx에서 코딩하다가 옆자리에서 오류 잡아주심 [3] ㅇㅇ(118.235) 06.19 361 0
45672 일반 님들은 백준 몇년했어요? [6] ㅇㅇ(24.30) 06.19 276 0
45671 일반 자꾸 똑같은 사람이 내 코드 본다 [1] ㅇㅇ(116.39) 06.19 180 0
45670 일반 솔브닥 디코 채널에 드갔는데 글 쓰려면 어케 해야 함 [3] ㅇㅇ(45.94) 06.19 217 0
45669 일반 rust 어려워요 [2] ㅇㅇ(24.30) 06.19 175 0
45667 일반 2주차 완주 Miyano갤로그로 이동합니다. 06.19 185 4
45665 일반 모든 문제의 풀이가 공개여도 된다면 [1] ㅇㅇ(1.240) 06.19 241 0
45664 일반 코테할 때 자기만의 알고리즘 템플릿 쓸라면 ㅇㅇ(211.182) 06.19 193 1
45662 질문 솔브닥 플래딱인데 CP실력을 늘리려면 [6] ㅇㅇ(223.39) 06.18 317 0
45661 일반 랜덤마라톤 완주 횟수 기록됨? [1] ㅇㅇ(106.101) 06.18 170 0
45660 일반 백준 이거 브론즈문제 왜 정답률 33퍼임? [15] 퀀트가는그날까지갤로그로 이동합니다. 06.18 361 1
45659 일반 ucpc 성별 여자로 체크하고 할당제받아도 돼?? [7] ㅇㅇ(118.235) 06.18 330 1
45657 일반 누텔라가 이 뜻이었음? [3] ㅇㅇ(126.168) 06.18 323 0
45656 일반 Ps 뉴비 [4] ㅇㅇ(119.75) 06.18 151 0
45655 일반 PS 갤러리 코드포스 최고 레이팅 설문 최종결과 [1] 설문조사빌런(223.39) 06.18 229 0
45654 일반 PS 마이너 갤러리 Solved.ac 굿즈 수요조사 [1] 설문조사빌런(223.39) 06.18 217 0
45653 일반 솔브닥 쿠션 결제는 됬는데, 된건가요? [1] 람사산안갤로그로 이동합니다. 06.18 169 0
45652 일반 누텔라 <---- 이쯤 되면 잠잘때도 코포하는 꿈꿀까? [1] ㅇㅇ(223.39) 06.18 166 0
45651 일반 플5까지 40점 남았고 상위 100문제 전부 골든데 [10] ㅇㅇ갤로그로 이동합니다. 06.18 286 0
45650 일반 나 퍼플임 [2] ㅇㅇ(118.235) 06.18 270 3
45649 일반 알고리즘 대충 아는 상태에서 CLRS같은 책 보면 ㅇㅇ(223.38) 06.18 147 1
45648 일반 달려??? [1] ㅇㅇ(1.240) 06.18 187 0
45646 일반 드디어 그림자 풀었다 [23] ㅇㅇ(163.152) 06.18 843 66
45645 일반 뉴붕이 처음으로 골드 문제 풀었다 [2] ㅇㅇ(210.104) 06.18 194 7
45643 일반 12107번, 이거 왜 맞았는지 모르겠습니다. [5] ㅇㅇ(1.212) 06.18 209 0
45641 일반 다이아급 문제는 어디서 공부해야됨? [3] ㅇㅇ(27.35) 06.18 244 0
45640 일반 UCPC나 ICPC에 비전공자 많음? [4] ㅇㅇ(39.7) 06.18 257 0
45639 일반 와....펜윅트리 이새끼 혁명적이네 [9] ㅇㅇ(106.101) 06.18 337 6
45638 일반 코테에서 개인라이브러리 사용 가능함? [4] ㅇㅇ(203.246) 06.18 202 0
45637 일반 leetcode 뱃지 자랑 [2] ㅇㅇ(116.32) 06.18 222 0
45636 일반 굿즈샵에 있는거 안사고 내가 만들어볼까 [1] ㅇㅇ(118.235) 06.18 177 2
45635 일반 님들 어디플랫폼 씀? [7] ㅇㅇ(116.32) 06.18 245 0
45634 일반 정수론 너무 어렵네 진짜 [2] 고추꺼내봐갤로그로 이동합니다. 06.18 249 0
45633 일반 사야겠지? ㅇㅇ(210.117) 06.18 154 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2