250x250
Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 스택
- deque
- map
- List
- 힙덤프
- 스프링부트
- html
- scanner
- math
- NIO
- dfs
- Java
- alter
- Calendar
- union_find
- CSS
- Union-find
- set
- spring boot
- sql
- 큐
- priority_queue
- 리소스모니터링
- BFS
- JPA
- javascript
- date
- string
- GC로그수집
- Properties
Archives
- Today
- Total
매일 조금씩
백준 12845번 : 모두의 마블 C++ 본문
728x90
반응형
처음에 어떻게 풀까 고민을 많이 했다.
그리디 알고리즘 문제이니 가장 높은 레벨을 찾은 후에 양쪽을 확인하고 더하면서 문제를 풀면 되겠다 라고 생각했다.
어쨋든 처음부터 가장큰 레벨인 것부터 시작하는 것이 가장 큰값이 나올것이기 때문..
근데 이걸 생각하다보니 의문이 들었다.
이런식의 연산을 하다보면 가장 큰레벨의 값은 처음 부터 끝까지 모든 덧셈에 포함된다. 정확히 n-1번의 덧셈에 포함이 된다. 그리고 나머지 레벨들은 한번씩 더해진다.
그럼 결과는 아주 쉽게 도출될 수 있었다.
(가장 큰 레벨) * (n-1) + (나머지 레벨들의 합)
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
using namespace std;
int n, maxgold;
const int MAX = 1000001;
int arr[MAX];
int main(void) {
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
int maxlevel = arr[0];
int sum = 0;
for (int i = 0; i < n; i++) {
if (max(maxlevel, arr[i]) != maxlevel) {
maxlevel = arr[i];
}
sum += arr[i];
}
sum -= maxlevel;
int result = maxlevel * (n - 1) + sum;
cout << result << '\n';
}
728x90
반응형
'알고리즘 > 그리디' 카테고리의 다른 글
백준 11000번 : 강의실 배정 C++ (0) | 2021.06.03 |
---|---|
백준 1946번 : 신입사원 c++ (0) | 2021.06.02 |
[C++] 프로그래머스 : 단속 카메라 (0) | 2021.02.02 |
[C++] 프로그래머스 : 섬 연결하기 (0) | 2021.02.02 |
[C++] 프로그래머스 : 구명보트 (0) | 2021.02.02 |