https://www.acmicpc.net/problem/2217

[필자 사고]
처음에 가장 작은값을 구한다음 배열의 갯수를 곱하면 문제가 해결될 줄 알았다.
잠시 고민해본 뒤 꼭 모든 줄을 사용할 필요가 없었다.
그래서 내림차순으로 정렬한 뒤 하나하나 최대로 버틸수 있는 무게를 구해서 비교를 해주었다.
아래는 자세한 코드 해설이다.
[코드 해설]
cmp 함수
- bool cmp(int a, int b)
- 정렬 기준을 정의하는 함수입니다.
- a > b 조건을 반환하므로, 내림차순 정렬을 수행합니다.
main 함수
- 입출력 최적화 설정
- ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) 으로 빠른 입출력을 설정합니다.
- 입력 처리
- 정수 N을 입력받음.
- for문을 통해 N개의 로프의 최대 하중을 입력받아 arr 벡터에 저장.
- 정렬
- sort(arr.begin(), arr.end(), cmp)
- arr 벡터를 내림차순으로 정렬합니다.
- 즉, 가장 강한 로프부터 가장 약한 로프 순서대로 정렬됩니다.
- 최대 하중 계산
- maxResultWeight 변수를 -1로 초기화.
- for문으로 각 로프를 확인하면서, 해당 로프와 그보다 강한 로프들을 함께 사용할 때의 하중을 계산.
- nowNum = arr[i] → 현재 로프의 하중.
- maxNowWeight = nowNum * (i + 1)
- 현재 로프를 포함해 (i+1)개의 로프를 사용했을 때의 총 하중.
- maxResultWeight = max(maxResultWeight, maxNowWeight)
- 지금까지 구한 최대값과 비교해 더 큰 값을 저장.
- 출력
- 최종적으로 가능한 최대 하중을 출력합니다.
[소스 코드]
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int N;
vector<int> arr;
bool cmp(int a, int b) {
return a > b;
}
int main(void) {
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
cin >> N;
for (int i = 0; i < N; i++) {
int num;
cin >> num;
arr.push_back(num);
}
sort(arr.begin(), arr.end(), cmp);
int maxResultWeight = -1;
for (int i = 0; i < arr.size(); i++) {
int nowNum = arr[i];
int maxNowWeight = nowNum * (i + 1);
maxResultWeight = max(maxResultWeight, maxNowWeight);
}
cout << maxResultWeight;
}'백준 > 정렬' 카테고리의 다른 글
| 백준 1302 c++ "베스트셀러" -PlusUltraCode- (1) | 2025.09.17 |
|---|---|
| 백준 10825 c++ "국영수" -PlusUltraCode- (0) | 2025.09.17 |
| 백준 1026 c++ "보물" -PlusUltraCode- (0) | 2025.09.17 |
| 백준 11728 c++ "배열 합치기" -PlusUltraCode- (0) | 2025.09.16 |
| 백준 11004 c++ "K번째 수" -PlusUltraCode- (0) | 2025.09.16 |