본문 바로가기

백준/C++

[C++] 백준 2822번 점수 계산

728x90

 

내일은 집 가는 날~~

 

문제

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

 

2822번: 점수 계산

8개 줄에 걸쳐서 각 문제에 대한 참가자의 점수가 주어진다. 점수는 0보다 크거나 같고, 150보다 작거나 같다. 모든 문제에 대한 점수는 서로 다르다. 입력으로 주어지는 순서대로 1번 문제, 2번 문

www.acmicpc.net

 

상근이 녀석.... 여자친구와 전화 통화를 하느라 참가자의 점수를 계산하지 않고 있었다고 한다(훌륭한 녀석 ㅎㅎ).

이 문제를 보니까 pair를 이용하여 문제 순서를 삽입하면 될 것 같다. 입력받은 벡터를 정렬한 후 가장 큰 5개의 점수를 다 더하고, 더할 때 문제 순서는 다른 벡터에 저장해 둔다. 그리고 문제 순서를 저장한 벡터를 정렬하여 순서대로 출력해 주면 될 것 같다.

 

 

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

vector <pair<int, int>> quiz;
vector<int> num;
int k;
int main() {
	for (int i = 1; i <= 8; i++) {
		cin >> k;
		quiz.push_back(make_pair(k, i));
	}
	sort(quiz.begin(), quiz.end());
	int total = 0;
	for (int i = 7; i > 2; i--) {
		total += quiz[i].first;
		num.push_back(quiz[i].second);
	}
	sort(num.begin(), num.end());
	cout << total << "\n";
	
	for (int i = 0; i < 5; i++) {
		cout << num[i] << " ";
	}

	return 0;
}

 

 

 

ㅎㅎ 맞았다

 

 

 

 

다른 분의 풀이를 보니 class를 사용하여 문제의 점수와 번호를 함께 저장해주었다. 그리고 문제의 점수를 기준으로 내림차순 정렬을 하기 위해 함수를 따로 지정해 주고, 점수와 번호가 섞이지 않도록 stable_sort를 사용하였다. 

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

class problem {
public :
	int score;      // 문제 점수
	int num;        // 문제 번호
};

// 문제의 점수를 기준으로 "내림차순" 정렬 
bool cmp(problem a, problem b) {
	return a.score > b.score;
}

int main() {
	problem* p = new problem[8];
	int sum = 0;
	int arr[8];    // 문제번호를 복사해, 따로 정렬해주기 위한 배열

	for (int i = 0; i < 8; i++) {
		cin >> p[i].score;
		p[i].num = i + 1;
	}

	// 안정정렬 (기존의 문제의 번호와 점수에 대한 순서가 바뀌지 X)
	stable_sort(p, p + 8, cmp);

	for (int i = 0; i < 5; i++) {
		sum += p[i].score;
		arr[i] = p[i].num;
	}

	// 문제의 번호만 순서대로 정렬
	sort(arr, arr + 5);

	cout << sum << "\n";
	for (int i = 0; i < 5; i++) {
		cout << arr[i] << " ";
	}
	
	return 0;
}
출처: https://beginnerdeveloper-lit.tistory.com/93 [초보 개발자의 이야기, 릿허브:티스토리]

 

 

난 내림차순으로 하려고 greater를 사용했는데, 오류가 나서 그냥 오름차순으로 정렬해버렸다... ㅎㅎ

 

.... 그런데!!!!!

다른 풀이를 찾아보다가 greater로 내림차순 정렬을 한 코드를 발견하였다. 알고보니...

greater <pair <int, int>>()를 해줘야 하는데 난... greater <int, int>()라고 작성하였다 ㅎㅎ

 

이렇게 하나 얻어간다 ㅎㅎ

 

 

 

 

 

요즘 시간이 참 빨리 간다.

지나간 시간은 다시 돌아오지는 않지만, 가끔은 예전으로 돌아가고 싶어 진다.

그래도... 지금 이 시간도 후에 내가 그리워할 시간이라고 생각하고 지금을 열심히 살아가야겠다.

 

728x90

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

[C++] 백준 1337번 - 올바른 배열  (0) 2024.03.01
[C++] 백준 2470번 - 두 용액  (2) 2024.03.01
[C++] 백준 5800번 성적 통계  (4) 2023.12.26
[C++] 백준 14729번 칠무해  (2) 2023.12.25
[C++] 백준 5576번 콘테스트  (2) 2023.12.25