본문 바로가기

백준/C++

[C++] 백준 11399번 ATM

728x90

 

으... 목편도가 아파...

오늘은 따뜻하게 하고 자야겠다...

 

문제

https://www.acmicpc.net/problem/11399

 

11399번: ATM

첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)

www.acmicpc.net

 

오늘의 문제는... 배열로 받아준 다음, 이를 오름차순으로 정렬해 준다. 그리고... 반복문을 돌려주어 각자 몇 분이 걸리는지 알기 위해 더해주고 그것을 걸리는 최종 시간에 더해주면 될 것 같다. (무슨 소리인지 모르겠다고요?? 저도요...)

 

말로는 하기 힘드니 코드를 작성해보려고 한다.

#include <iostream>
#include <algorithm>
using namespace std;

int people[1001];

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	
	int n, sum = 0, result = 0;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> people[i];
	}

	sort(people, people + n);	//오름차순으로 정렬

	for (int i = 0; i < n; i++) {
		sum += people[i];
		result += sum;
	}
	cout << result<<"\n";
	return 0;
}

 

짜자잔~~

 

 

오예~~~ 맞았습니더~~~

 

 

다른 사람도 이런 식으로 풀었겠지 했는데 다른 방식으로 푼 사람도 있었다.

#include<iostream>
#include<algorithm>
using namespace std;

const int MAX = 1000;
int n, i;
int p[MAX];
int main(void){
    cin >> n;
    for(int i =0; i<n ;i++){
    	cin >> p[i];	
	}
	
	sort(p, p+n);
    int sum = 0;
	for(int i =0; i<n ;i++){
    	sum += p[i]*(n-i);
	}
	
	cout << sum << endl;
	return 0;
}
출처: https://cho000023.tistory.com/62

 

정렬 후 대기시간 반복수만큼(n-i)을 추가해 주었다고 하는데 처음에는 무슨 소리인가 했다. 그런데!!! 예제를 생각해보면 {1,2,3,3,4}일 때, 1은 5번, 2는 4번, 3은 3번, 3은 2번, 4는 1번 더해지는 것을 알 수 있다. 즉, 기다려줘야 하는 대기시간을 미리 추가해 준 것이었다. (오호...)

 

 

다른 사람은 scanf나 vector를 쓰는 등 다 같은 알고리즘이었다....

나도 알아놔야지 ㅎㅎ

 

 

728x90

'백준 > C++' 카테고리의 다른 글

[C++] 백준 2309번 일곱 난쟁이  (4) 2023.12.15
[C++] 백준 1920번 수 찾기  (0) 2023.12.14
[C++] 백준 10825번 국영수  (2) 2023.12.12
[C++] 백준 11004번 k번째  (2) 2023.12.11
[C++] 백준 10816번 숫자 카드 2  (2) 2023.12.10