반응형
일단 기다리는 시간을 최소화해야하므로 입력받은 수를 벡터에 저장 후, sort STL을 이용해 정렬한 다음
반복문을 사용해 각 벡터의 값인 v[i]의 값을 계속 축적해가면서 출력할 변수인 ans에 더해줬다
입력이 3 1 4 3 2 인 경우
1 2 3 3 4로 정렬을 하고 더하게 되면
1
1+2
1+2+3
1+2+3+3
1+2+3+3+4
의 값이 필요하므로
벡터 v의 i번째의 값을 더할때는 i-1까지의 덧셈이 모두 필요하므로
v[i]까지의 합을 더해주는 변수 tmp와 이 합들을 모두 더해줄 ans 변수를 사용했다
처음에는 변수 하나만으로 표현하려고 해서 계속 벡터의 값을 다 더하기만한 13만 찍어냈는데
ans 변수 하나를 추가하니 바로 해결돼버림
#include <bits/stdc++.h>
using namespace std;
int main() {
vector<int> v;
int cnt = 0;
int tmp=0;
cin >> cnt;
for(int i=0; i<cnt; i++){
cin >> tmp;
v.push_back(tmp);
}
tmp=0;
int ans=0;
sort(v.begin(), v.end());
for(int i=0; i<cnt; i++){
tmp+=v[i];
ans+=tmp;
}
cout <<ans;
return 0;
}
덧셈부분을 좀더 단순화해본 코드
1
1+2
1+2+3
1+2+3+3
1+2+3+3+4
v[0]은 총 5번 더하고 v[1]은 4번더하고 ... v[4]는 한번 더해서 반복되는 덧셈 과정을 곱셈으로 바꿔줌
#include <bits/stdc++.h>
using namespace std;
int main() {
vector<int> v;
int cnt = 0;
int tmp=0;
cin >> cnt;
for(int i=0; i<cnt; i++){
cin >> tmp;
v.push_back(tmp);
}
int ans=0;
sort(v.begin(), v.end());
for(int i=0; i<cnt; i++){
ans += (cnt-i)*v[i];
}
cout <<ans;
return 0;
}
출처 : www.acmicpc.net/problem/11399
반응형
'문제풀기' 카테고리의 다른 글
[백준/BOJ] 21312번 문제, 홀짝 칵테일 C++ 풀이 (0) | 2021.03.28 |
---|---|
[백준/BOJ] 구현 14681번 문제, 사분면 고르기 C++ 풀이 (0) | 2021.03.27 |
[백준/BOJ] 구현 11720번 문제, 숫자의 합 C++ 풀이 (0) | 2021.03.24 |
[백준/BOJ] 구현 2562번 문제, 최댓값 C++ 풀이 (0) | 2021.03.17 |
[백준/BOJ] 구현 8958번 문제, OX퀴즈 C++ 풀이 (0) | 2021.03.14 |
[백준/BOJ] 구현 2577번 문제, 숫자의 개수 C++ 풀이 (0) | 2021.03.12 |