https://www.acmicpc.net/problem/11399
기다리는 각 사람 별로 기다리는 시간의 합을 구하는 문제이다.
그리디 알고리즘으로 분류되어 있는데...
그냥 정렬해서 합을 구하면 된다.
2중 for 문으로 n 번째 사람별로 처음부터 n 번째까지의 시간을 구할 수도 있는데
1번째 사람의 인출 시간은 총 시간에서 n 번 더하게 되고
2번째 사람의 인출 시간은 총 시간에서 n-1 번 더하게 된다.(1번째 사람 제외)
...
n 번째 사람의 인출 시간은 총 시간에서 1번 더하게 된다.
이런 식으로 for 문 한 번만 써서 구하면 시간을 단축시켰다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <iostream> #include <vector> #include <algorithm> using namespace std; int main(){ int n,ans=0; cin>>n; vector<int> vec(n,0); for(int i=0;i<n;i++) scanf("%d",&vec[i]); sort(vec.begin(),vec.end()); for(int i=0;i<n;i++) ans+=vec[i]*(n-i); cout<<ans<<endl; return 0; } | cs |
'알고리즘(BOJ) > 그리디' 카테고리의 다른 글
백준 1049번 - 기타줄 (0) | 2018.02.03 |
---|---|
백준 10610번 - 30 (0) | 2018.02.01 |
백준 2217번 - 로프 (0) | 2018.01.31 |
백준 1931번 - 회의실배정 (2) | 2018.01.28 |
백준 11047번 - 동전 0 (0) | 2018.01.28 |