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
- Xilinx
- vitis
- verilog
- 코딩테스트
- chip2chip
- Beakjoon
- boj
- 자격증
- hdl
- baekjoon
- 정보처리기사
- HDLBits
- Bus
- Zynq
- AMBA BUS
- Vivado
- java
- 백준
- FPGA
- SQL
- verilog HDL
- linux
- 정처기
- UNIX
- amba
- C++
- Backjoon
- 리눅스
- 실기
- axi
Archives
- Today
- Total
Hueestory
[1715] 카드 정렬하기 (C++) 본문
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N; cin >> N;
int sum = 0;
priority_queue<int, vector<int>, greater<int>> A;
for (int i = 0; i < N; i++) {
int tmp; cin >> tmp;
A.push(tmp);
}
while (!A.empty()) {
if (A.size() == 1) {
break;
}
int n1 = A.top(); A.pop();
int n2 = A.top(); A.pop();
sum += n1 + n2;
A.push(n1 + n2);
}
cout << sum;
return 0;
}
* 단순 오름차순 정리 후 0 ~ N - 1항까지 차례대로 연산하면 반례가 발생한다
반례)
4 5 6 7 10
알고리즘 계산 : (5 + 6) + (5 + 6 + 7) + (5 + 6 + 7 + 10) = 11 + 18 + 28 = 57
논리적인 계산 : (5 + 6) + (7 + 10) + (5 + 6 + 7 + 10) = 11 + 17 + 28 = 56
따라서 우선순위 큐를 사용하여 연산이 발생할 때 마다 재정렬 될 수 있도록 한다
1. 우선순위 큐를 생성, 오름차순으로 정리
2. 가장 작은 수 n1, n2를 더한 값을 sum에 더한다
3. A의 크기가 1이 되면 반복문 탈출
4. sum 출력
'PS(중단) > BOJ' 카테고리의 다른 글
[1931] 회의실 배정 (C++) (0) | 2024.05.14 |
---|---|
[1744] 수 묶기 (C++) (0) | 2024.05.14 |
[11047] 동전 0 (C++) (0) | 2024.05.13 |
[1300] K번째 수 (C++) (0) | 2024.05.13 |
[2343] 기타 레슨 (C++) (0) | 2024.05.13 |
Comments