★Greedy Upper-Intermediate I - 8 Solved()★
🦒 문제 자체의 최적의 솔루션 ★ 11497 통나무 건너뛰기 ★ 🦒 문제를 이해하고 idea를 생각하는 게 중요! 🦒 인접한 두 통나무 높이 차의 최댓값을 최소화하는 문제 ① 즉, 최소화하기 위해서는 인접한 두 통나무간의 높이 차가 최소화되어야 한다 ② 서로간의 높이 차를 최소화하려면, 가장 큰 통나무부터 순서대로 $h_1, h_2, h_3, h_4, .... h_n$으로 정렬한 뒤, $h_1$을 정중앙에, 그 다음 $h_2, h_3$를 양옆에, $h_4, h_5$를 그 다음 양 옆에 차례대로 배치하면, 서로 간의 높이 차를 최소화할 수 있다. 🦒 greedy의 생명은 시간 단축! 매우 많은 풀이를 보며 시간 단축을 문제의 특성에 맞게 code로 고쳐가며 진행해보자 - 352ms - ① 위 그림에 맞게 ..
BOJ/🥈
2023. 1. 27.
🫂 Prefix Sum
intro ✊🏻 구간 합 문제는 연속적으로 나열된 N개의 수가 있을 때, 특정 구간의 모든 수를 합한 값을 계산하는 문제 유형을 뜻한다. ✊🏻 예를 들면, 5개의 데이터로 구성된 수열 {10, 20, 30, 40, 50}이 있다고 가정했을 때, 2번째 수부터 4번째 수까지의 합은 20 + 30 + 40인 90이 된다. ✊🏻 N개의 정수로 구성된 수열이 있고, M개의 query 정보가 주어진다. 각 query는 left와 right로 구성. 각 query에 대하여 [left, right] 구간에 포함된 데이터들의 합을 출력해야 한다. (수행 시간 제한은 O(N+M)) → 위 예와 접목하자면, 5개의 데이터 (N=5)로 구성된 수열에서 매번 새로운 query 구간마다 해당 합을 구한다면 시간 복잡도는 O(N..
Computer Science/Algorithms
2023. 1. 18.
★Math Beginner IV - 22 Solved★
★ 2914 저작권 ★ A,I=map(int,input().split()) print(A*(I-1)+1) 🔢 올림해서 결과를 내기 때문에 I-1을 곱한다음 1을 더하면 된다. ★ 15923 욱제는 건축왕이야!! ★ ans=0 N=int(input()) l=[] for _ in range(N): x,y=map(int,input().split()) l.append((x,y)) for i in range(N): if i==0: x0,y0=l[N-1][0],l[N-1][1] else: x0,y0=l[i-1][0],l[i-1][1] x1,y1=l[i][0],l[i][1] if x0==x1:ans+=(abs(y0-y1)) else:ans+=(abs(x0-x1)) print(ans) 🔢 누적해서 거리합을 더해나가면 ..
BOJ/🥉
2023. 1. 16.