BOJ 2

BOJ 2357 최솟값과 최댓값

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

백준 2025.04.01

BOJ 13926 gcd(n, k) = 1

이 문제는 이전에 풀었던 BOJ 11689 GCD(n,k) = 1 의 강화버전인 문제이다. 문제에서 구하고자 하는 바와 기본적인 코드 구조는 거의 동일하다고 볼 수 있다.단지, 입력되는 숫자의 범위가 기존 10^12에서 10^18로 늘어났단 점만 제외하면 말이다. 이렇게 범위가 늘어남으로 인해 많은 것이 바뀌었다. 기존에 11689번 문제는 에라토스테네스의 체를 이용해서 소수의 리스트들을 뽑아낸 뒤 (10^6까지의 소수만 뽑으면 된다) 이를 직접 입력된 n에 대입해가면서 인수인지 아닌지를 구분해 낸 뒤, 이를 소인수 리스트에 저장해서 오일러 피 함수를 구하는 방식으로 진행됐다. 하지만 수의 범위가 10^18이 되면서, 에라토스테네스의 체를 사용하는 것이 불가능하게 되었다.에라토스테네스의 체는 10^6을 ..

백준 2025.03.31