[TIL] 백준 11060 - 점프 점프 ( python )
·
TIL
📌 문제 탐색하기N : 배열의 크기 ( 1 ≤ N ≤ 1,000 )A : 크기가 N인 배열 (0 ≤ Ai ≤ 100) 인덱스 i에 있는 숫자 A[i]는 최대 A[i]칸까지 오른쪽으로 점프 가능합니다.시작점은 0번 인덱스이고, 도착점은 N-1번 인덱스이며, 가장 오른쪽 칸에 도달하기 위한 최소 첨프 횟수를 구하는 것이 핵심입니다. 가능한 시간복잡도각 칸에서 가능한 점프 범위만큼 다음 칸들을 순회하면서 최소 점프 횟수를 갱신합니다.이 과정에서, 각 칸에서 최대 A[i]번 반복하게 되며, 문제 조건에 따라 A[i]는 최대 100입니다.외부 반복문은 0부터 N-1까지 순회하므로 O(N)내부 반복문은 각 i마다 최대 A[i]번 수행하므로, O(A[i])전체 시간복잡도는 O(N × K)이며, 여기서 K는 max(..
[TIL] 백준 13702 - 이상한 술집 ( python )
·
TIL
📌 문제 탐색하기N : 막걸리 주전자 개수 ( 1 ≤ N ≤ 10,000)K : 친구 수 ( N ≤ K ≤ 1,000,000 )막걸리 용량 : 0 ≤ 용량 ≤ 2³¹ - 1 K명의 사람에게 각 주전자의 막걸리를 섞지 않고 동일한 용량(x ml)씩 나눠주려고 할 때, 가능한 용량(x)의 최댓값을 구하는 것이 핵심입니다.가능한 시간복잡도이분탐색각 주전자마다 serving 가능한 개수를 계산 → O(N)가능한 용량(x)의 범위는 1부터 max(rice_wines) (최대 약 2³¹)까지 → 대략 O(log(max(rice_wine)))총 시간 복잡도 : O(N × log(max(rice_wine)))N 최대 10,000, max(rice_wine)가 2³¹ 정도이므로, log(2³¹) = 약 31회 정도 반..
[TIL] 백준 25418 - 정수 a를 k로 만들기 ( python )
·
TIL
📌 문제 탐색하기A, K : 양의 정수 조건연산 1: A에 1을 더한다.연산 2: A에 2를 곱한다.위의 조건을 반복적으로 적용하여 A를 K로 만드는 최소 연산 횟수를 구하는 것이 핵심입니다. 1 ≤ A  K ≤ 1,000,000가능한 시간복잡도A부터 조건 탐색A에서부터 연산을 적용한 결과들을 차례대로 탐색하면서 최소 횟수로 K에 도달하는 경로를 찾습니다.K와 A의 차이가 커질수록, A가 작고 K가 1,000,000에 가까운 경우에는 탐색해야 할 상태의 수가 많아집니다.최악의 경우 O(K - A) 이상의 노드를 탐색할 수 있습니다.K부터 조건 탐색K가 항상 A보다 큰 값이기 때문에 분할 연산을 적용할 수 있는 경우가 많습니다.여러 번 K를 절반으로 줄여 빠르게 A에 접근할 수 있습니다.K가 지수적으로 ..
[TIL] 백준 2467 - 용액 ( python )
·
TIL
📌 문제 탐색하기N = 전체 용액의 수solutions = 용액의 특성값 저장하는 배열 산성 용액과 알칼리성 용액 각각에 대해 정수값(산성: 양수, 알칼리: 음수)이 있습니다.두 개의 서로 다른 용액을 혼합했을 때 그 합이 0에 가장 가까운 두 용액을 찾는 것이 핵심입니다. 찾은 두 용액의 특성값을 오름차순으로 출력해야 합니다.산성 용액끼리 혹은 알칼리성 용액끼리 혼합하는 경우도 고려해야 합니다. 2 ≤ N ≤ 100,000-1,000,000,000 ≤ 각 용액의 특성값 ≤ 1,000,000,000가능한 시간복잡도브루트 포스(완전 탐색):모든 가능한 쌍을 계산하면 N(N-1) / 2 입니다.N이 최대 100,000이면 대략 100,000 * 99,999 = 10^10 이고, 2로 나누면 5 * 10^9..
[TIL] 백준 2805 - 나무 자르기 ( python )
·
TIL
📌 문제 탐색하기 N : 나무 개수, )M : 가져가야 할 나무 길이trees : N개의 나무 높이 리스트  상근이는 최소 M미터의 나무를 가져가기 위해 나무를 일정 높이에서 잘라야 합니다.필요한 나무를 가져갈 수 있는 절단기 높이의 최댓값을 구하는 것이 핵심입니다.잘린 나무의 길이의 합이 M 이상이어야 하며, 절단기의 높이를 조정하면서 가장 높은 값을 찾아야 합니다.  1 ≤ N ≤ 1,000,0001 ≤ M ≤ 2,000,000,0001 ≤ 나무 높이 ≤ 1,000,000,000가능한 시간복잡도완전탐색0부터 제일 길이가 긴 나무(max(trees)까지 모든 절단기가 자를 나무의 높이를 순회하면서 자른 나무의 길이를 계산합니다.최악의 경우max(trees) = 1,000,000,000N = 1,000..
[TIL] 백준 17266 - 어두운 굴다리 ( python )
·
TIL
📌 문제 탐색하기N : 굴다리의 길이M : 가로등의 개수x : 가로등의 위치 길이 N인 일직선 상에서 M개의 특정 지점이 주어집니다. 각 지점을 중심으로 일정한 거리를 덮을 수 있는 가로등이 있습니다.모든 구역(0 ~ N)을 덮을 수 있도록 가로등을 설치할 때, 최소한의 가로등 길이를 구하는 것이 핵심입니다. 1 ≤ N ≤ 100,0001 ≤ M ≤ 100,0001 ≤ x[i] ≤ N가능한 시간복잡도브루트 포스 ( 완전 탐색 )최악의 경우: N * M = 100,000 * 100,000 = 10^10 (시간 초과)완전 탐색은 O(N * M), 시간 초과 가능성이 매우 큽니다.이진 탐색 접근최솟값과 최댓값을 기준으로 이진 탐색을 수행합니다.중간값에 대해 모든 가로등의 지점을 순회하면서 영역을 덮을 수 있..
[TIL] 백준 13335 - 트럭 ( python )
·
TIL
📌 문제 탐색하기n = 트럭 개수w = 다리 길이L = 다리의 최대하중 다리 위에는 동시에 최대 w대의 트럭만 올라갈 수 있습니다.다리 위의 트럭들의 총무게는 L을 초과할 수 없으며, 매 초마다 하나의 단위 길이(unit distance)만 이동해야 합니다.트럭이 다리를 다 건너는 데 걸리는 최소 시간을 구하는 것이 핵심입니다. n ≤ 1000w ≤ 100L ≤ 1000 가능한 시간복잡도트럭이 다리를 건너는 과정은 초 단위로 진행됩니다.최악의 경우, 1초에 1개의 트럭만 이동한다고 가정하면 O(n * w) 만큼 걸릴 수 있습니다.하지만 w의 최대값이 100이므로 최악의 경우라도 1000 * 100 = 100,000번 연산입니다.1초에 1천만 번 정도 처리하기에 시간 내에 충분히 처리 가능한 수준입니다...
[TIL] 백준 2615 - 오목 ( python )
·
TIL
📌 문제 탐색하기N = 19matrix = N * N 2차원 배열 바둑판0 = 빈칸1 = 흑돌2 = 백돌 19×19 크기의 바둑판에서 각 칸에 0(빈칸), 1(흑돌), 2(백돌)이 놓여 있을 때, 오목이 있는지 판별하는 것이 핵심입니다. 단, 연속된 돌이 6개 이상이면 오목으로 인정하지 않습니다.1 ≤ N ≤ 19가능한 시간복잡도보드의 크기는 19×19로 총 361칸입니다.각 칸마다 최대 4가지 방향을 확인하며, 각 방향은 최대 19칸까지 연속 검사를 진행합니다.4가지 방향오른쪽: (y, x) = (0, 1)아래쪽: (y, x) = (1, 0)오른쪽 아래 대각선: (y, x) = (1, 1)오른쪽 위 대각선: (y, x) = (-1, 1)최악의 경우 연산 횟수는 약 361 × 4 × 19 = 27,43..