일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- directx
- codility
- 쓰레드
- 동적계획법
- 멀티쓰레드
- 백준
- I/O장치
- 프로그래머스
- 스케줄링
- 파일시스템 구현
- 알고리즘
- 영속성
- 다이나믹프로그래밍
- 컨디션 변수
- 그리디알고리즘
- DirectX12
- 운영체제
- 디자인패턴
- 병행성
- DirectX 12
- 자료구조
- 멀티프로세서
- 락
- Direct12
- 타입 객체
- 다이나믹 프로그래밍
- 렌더링 파이프라인
- OS
- 그리디 알고리즘
- 병행성 관련 오류
Archives
- Today
- Total
기록공간
로프 (백준 - 2217번) 본문
반응형
우선, 로프들을 오름차순으로 정렬한 후, 그리디 알고리즘을 이용하여 풀면된다.
O(n^2)를 사용하면 시간초과가 나므로 이점을 유의해서 풀어야한다.
정렬 후에 할일은 다음과 같다. 배열 가장 처음에 위치하는 가장 길이가 짧은 로프는 모든 로프의 길이보다 작거나 같으므로 개수는 배열의 크기와 같다. 분기를 타며 길이가 길어질수록 로프의 개수를 하나씩 줄여나가면서 들 수 있는 중량을 구해주면된다. 이전에 저장된 들 수 있는 중량보다 현재 계산한 중량이 더 크다면 그 값으로 덮어쓴다.
코드는 다음과 같다.
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(int a, int b)
{
return a < b;
}
int main()
{
int input;
cin >> input;
int* arr = new int[input];
int maxLength = 0;
int maxWeight = 0;
for (int i = 0; i < input; ++i)
{
cin >> arr[i];
}
sort(arr, arr + input, cmp);
for (int i = 0; i < input; ++i)
{
maxLength = arr[i];
if(maxWeight < (input - i) * maxLength)
maxWeight = (input - i) * maxLength;
}
cout << maxWeight << endl;
delete[] arr;
}
반응형
'Algorithm > 문제' 카테고리의 다른 글
30 (백준 - 10610번) (0) | 2020.02.11 |
---|---|
거스름돈 (백준 - 5585번) (0) | 2020.02.08 |
회의실배정 (백준 - 1931번) (0) | 2020.02.08 |
동전 0 (백준 - 11047번) (0) | 2020.02.08 |
ATM (백준 - 11399번) (0) | 2020.02.08 |
Comments