일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- OS
- 컨디션 변수
- 스케줄링
- 렌더링 파이프라인
- 자료구조
- DirectX12
- 타입 객체
- 프로그래머스
- 쓰레드
- 락
- 동적계획법
- 파일시스템 구현
- 다이나믹 프로그래밍
- 영속성
- I/O장치
- 운영체제
- 그리디 알고리즘
- codility
- Direct12
- DirectX 12
- 디자인패턴
- 병행성 관련 오류
- 병행성
- 멀티쓰레드
- 그리디알고리즘
- 백준
- 알고리즘
- 다이나믹프로그래밍
- directx
- 멀티프로세서
Archives
- Today
- Total
기록공간
ATM (백준 - 11399번) 본문
반응형
정렬을 할 줄 안다면 정말 쉬운 문제이다. 시간의 합이 최소가 되기 위해서는 각 사람이 돈을 인출하는데 필요한 시간을 오름차순으로 정렬하면 된다.
정렬 전
[3 1 4 3 2]
3
3 + 1 = 4
3 + 1 + 4 = 8
3 + 1 + 4 + 3 = 11
3 + 1 + 4 + 3 + 2 = 13
3 + 4 + 8 + 11 + 13 = 39
정렬 후
[1 2 3 3 4]
1
1 + 2 = 3
1 + 2 + 3 = 6
1 + 2 + 3 + 3 = 9
1 + 2 + 3 + 3 + 4 + 13
1 + 3 + 6 + 9 + 13 = 32
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int personCount = 0;
int* personTime = nullptr;
int sum = 0;
cin >> personCount;
personTime = new int[personCount];
for (int i = 0; i < personCount; ++i)
{
int input = 0;
cin >> input;
personTime[i] = input;
}
sort(personTime, personTime + personCount);
for (int i = 0; i < personCount; ++i)
{
tempSum += personTime[i];
sum += tempSum;
}
cout << sum << endl;
delete[] personTime;
}
입력 수와 그에 맞는 각 사람의 인출에 필요한 시간을 입력 받은 배열을 오름차순으로 정렬해준 후 임시 값에 순차적으로 더해주면서 그걸 최종 값에 또 더해주면 된다. 보다 빠른 정렬을 위해 구현이 빠른 버블 정렬을 사용할 수 있었지만 sort() 메서드를 사용하였다.
반응형
'Algorithm > 문제' 카테고리의 다른 글
로프 (백준 - 2217번) (0) | 2020.02.08 |
---|---|
회의실배정 (백준 - 1931번) (0) | 2020.02.08 |
동전 0 (백준 - 11047번) (0) | 2020.02.08 |
별찍기 - 10 (백준-2447) (0) | 2019.07.26 |
하노이탑(백준-11729) (0) | 2019.07.26 |
Comments