파이썬 2

BOJ 1708 볼록 껍질

처음 문제를 봤을 땐 '이게 뭐지?' 싶었다. 그러다가 문득 깨달았다. '이게 그 유명한 Convex Hull 문제구나!!' 예전에 고등학교에 다니다가 컨벡스 헐에 대한 정보를 얼핏 들은적이 있었다. 그래서 이 문제에 관해서 어느정도 알고있었다. 그래서 약간의 기대감과 함께 문제에 손을 대기 시작했다. 하지만 처음엔 막막했다. 도저히 어디서부터 손을 대야하는지 모르겠다. 일단 내가 생각한 아이디어는 큰 원을 만들어서 이를 내접시키는 방식으로 진행해보고자 했다. 하지만 이 방식은 너무 어렵다. 그래서 다른 방법을 생각해보려 했으나 마땅치 않아 결국 구글을 켜게 되었다. 그렇게 찾은 결과는, Graham Scan 알고리즘이었다. 정확히 컨벡스 헐을 노리고 만든 알고리즘이었다. 이 알고리즘의 과정은 그리 어렵..

백준 2025.04.01

BOJ 2357 최솟값과 최댓값

문제의 첫 줄을 읽자마자, 'a번째 정수부터 b번째 정수까지' 이 문구가 눈에 들어왔다. 이 말인 즉슨, 세그먼트 트리를 이용할 가능성이 매우 높다는 뜻. 그리고 뒤에를 읽었더니 최솟값과 최댓값을 구하라는 얘기가 보인다. 그리고 입력되는 수의 범위를 봤더니 N과 M이 모두 10^5 이하의 자연수라는 조건이 보였다. 즉, 만약 시간복잡도가 O(N)인 알고리즘을 써야한다면, 10^10번의 계산을 해야한단 의미였다.  이는 2초라는 시간 내에 절대적으로 불가하므로 처음 생각했던 세그먼트 트리의 개념을 이용해서 문제를 풀기로 했다. 그런데 약간의 고민이 생겼다. 최대와 최소 모두를 출력해야 하는데 어떻게 세그먼트 트리로 나타내지? 그래서 2개의 세그먼트 트리를 이용해 각각 특정 구간에서의 최대와 최소를 나타내는..

백준 2025.04.01