일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 소프트맥스 함수
- 프로그래머스
- 웹해킹
- 5585
- old-1
- 딥러닝
- boj
- 퍼셉트론
- 리버싱
- 신규 아이디 추천
- webhacking.kr
- Old-14
- 코딩테스트 연습
- tcp
- JS
- 자바
- c언어 게임
- c++
- C언어
- 크레인 인형뽑기
- 백준
- 네트워크
- 10809
- Old-17
- 웹케이알
- 코드엔진
- 자바스크립트
- 게임 프로그래밍
- 계단함수
- openCV
Archives
- Today
- Total
SteffenLee
[BOJ]11399 - ATM [C++] 본문
문제 분류에서 그리디 알고리즘으로 분류되어 있는 문제입니다.
N명의 사람들이 각각 돈을 인출하는데 N분이 걸립니다.
이 문제에서는 모든 사람들이 인출하는데까지 최단시간이 걸리게 해야합니다.
그러려면, 인출하는데 시간이 짧게 걸리는 사람부터 돈을 인출하게 되면, 최단시간이 나오게 됩니다.
위 문제에서 주어진 예제를 보면 순서를 바꾸지 않고 그냥 진행하게 되면 각 사람들이 돈을 인출하는데 걸리는 시간의 합이 39분이 나옵니다.
여기서 시간이 짧게 걸리는 순으로 나열해서 계산을 하게되면 총 32분으로 시간이 단축됩니다.
그러면 프로그램의 흐름은, 시간을 내림차순으로 정리하고,
1번 사람 시간 + (1번 사람 시간 + 2번 사람 시간) + ....+(1번 사람 시간 +...+ n번 사람 시간)
이렇게 계산하면 됩니다.
코드 보겠습니다.
#include<iostream>
#include<utility>
#include<algorithm>
using namespace std;
int main() {
int n, tmp = 0, tot = 0;
int time[1000] = { 0, };
cin >> n;
for (int i = 0; i < n; ++i)
cin >> time[i];
sort(time, time + n);
for (int i = 0; i < n; ++i) {
for (int j = 0; j <= i; ++j) {
tmp += time[j];
}
tot += tmp;
tmp = 0;
}
cout << tot;
}
감사합니다.
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ]5585 - 거스름돈[C++] (0) | 2022.02.05 |
---|---|
[BOJ]1026 - 보물 [C++] (0) | 2022.02.02 |
[BOJ]8393 - 합 [C++] (0) | 2022.01.31 |
[BOJ] 1924 - 2007년[C++] (0) | 2022.01.27 |
[BOJ]10951 - A+B- 4[C++] (0) | 2022.01.25 |
Comments