전체 글 109

(매일 BOJ) C++ 2343번 기타 레슨

이번 문제는 2343번 기타 레슨 문제이다.접근법이 문제는 흔히 말하는 이분 탐색으로 정답을 찾는 문제 이다.즉, 정답이 될 수 있는 범위를 두고, 그 안에서 가능한지 아닌지를 판별하면서 범위를 좁혀나가는 방식으로 해결해야 한다.따라서 이 문제에서는 블루레이 크기를 정해놓고, 그 크기로 강의들을 나눴을 때 M개 이하로 블루레이가 필요한지 확인해야 한다. 여기서 이분탐색의 시작과 끝 값은 이러하다. start = 가장 긴 강의의 길이→ 블루레이 크기는 최소한 이 정도는 되어야 함end = 모든 강의의 총합 → 모든 강의를 하나에 담는다면 이게 최대그 후 mid 를 (start + end) / 2 로 설정하고 아래의 의사코드를 구현하면 된다.for (각 강의) { if (현재 누적 + 강의 > mid)..

매일 BOJ 2025.07.27

(매일 BOJ) C++ 1654번 랜선 자르기

이번 문제는 1654번 랜선 자르기 문제이다.접근법가지고 있는 랜선을 잘라 같은 길이의 원하는 개수로 만드는 문제이다. 이 문제에서는 주어진 랜선의 개수가 만개 만들어야 할 랜선의 개수가 최대 100만개 이하로 주어지기에 브루트포스를 사용한다면 TLE 가 발생하는 것을 볼 수 있다.따라서 랜선의 최소 길이를 1, 최대 길이를 가장 긴 랜선으로 설정한 후 길이를 이분탐색을 사용하여 찾아내면 TLE가 발생하지 않고 원하는 값을 찾아내는 것을 볼 수 있을 것이다.추가적으로 이 문제에서는 랜선의 최대 길이가 2의 32승 -1 까지이기에 길이와 관련된 변수들을 long long으로 설정해야 함을 주의해야 한다.작성코드# include using namespace std;int main (void){ ios:..

매일 BOJ 2025.07.25

(매일 BOJ) C++ 10815번 숫자카드

이번 문제는 10815번 숫자카드 이다.접근법최대로 상근이가 가지고 있는 숫자카드의 개수가 500,000개 판별해야 할 숫자카드의 개수가 500,000개이기에 이를 브루트포스로 푼다면 250억번의 연산이 필요하게 된다. 따라서 이를 해결하기 위해 상근이가 가지고 있는 숫자카드를 정렬한 후 알고리즘 라이브러리의 바이너리 함수을 통해 이분탐색으로 해당하는 값이 있는지 없는지를 판별한다면 TLE가 발생하지 않고 문제를 해결할 수 있다.작성코드# include using namespace std;int main (void){ ios::sync_with_stdio(0); cin.tie(0); int N; cin >> N; vector v1; vector v2; for (int i..

매일 BOJ 2025.07.25

(매일 BOJ) C++ 2805번 나무 자르기

이번 문제는 2805번 나무 자르기 이다.접근법이 문제는 이분 탐색을 사용해서 가장 높이 자를 수 있는 지점을 찾아내는 문제이다. 이분 탐색과 관련된 자세한 설명을 보고 싶으면 아래 글을 참고할 수 있다.2025.07.25 - [매일 BOJ] - (매일 BOJ) C++ 2512번 예산 (매일 BOJ) C++ 2512번 예산이번 문제는 2512번 예산 문제이다.접근법이 문제의 알고리즘 분류를 까보면 이분탐색 활용해야 한다고 작성되어 있다. 따라서start 값은 1,end 값은 예산 요청에서 가장 큰 값으로 설정한 후 for문norepinephrine.tistory.com 작성코드# include using namespace std;int main (void){ ios::sync_with_stdio(0..

매일 BOJ 2025.07.25

(매일 BOJ) C++ 2512번 예산

이번 문제는 2512번 예산 문제이다.접근법이 문제의 알고리즘 분류를 까보면 이분탐색 활용해야 한다고 작성되어 있다. 따라서start 값은 1,end 값은 예산 요청에서 가장 큰 값으로 설정한 후 for문 안에서 sum 변수를 만들어 start와 end값을 기준으로 생성된1) mid값보다 작으면 예산값을 더하고2) mid값보다 크면 mid 값을 더하는 방식으로 처리했다. 이분탐색# 핵심 개념정렬된 배열에서만 사용할 수 있음 (오름차순/내림차순 모두 가능)탐색 범위를 반으로 줄여가며 원하는 값을 찾음중간값(mid)을 기준으로 원하는 값이 왼쪽에 있는지, 오른쪽에 있는지를 판단# 기본 구조int binary_search(vector& arr, int target) { int left = 0; ..

매일 BOJ 2025.07.25

(매일 BOJ) C++ 24313번 알고리즘 수업 - 점근적 표기 1

이번 문제는 24313번 알고리즘 수업 - 점근적 표기 1 이다.접근법우리는 아래 부등식이 n >= n0 에 대해 성립하는지 확인해야 한다.더보기a1*n + a0 ≤ c⋅n ⇒ (a1−c) * n + a0 ≤ 0 위 식을 만족하는지 확인하기 위해 n=n0 을 대입해 보자이 때부터 모든 n ≥ n0 ​에 대해 위 부등식이 성립한다면, 출력은 1, 아니면 0이다 작성코드#include using namespace std;int main (void){ ios::sync_with_stdio(0); cin.tie(0); int a1, a0; cin >> a1 >> a0; int c; cin >> c; int n0; cin >> n0; if (a1 *..

매일 BOJ 2025.07.22