백준 2822번 점수 계산 (C++)

KIMHAJIN·2023년 3월 6일
0

백준 2822번: 점수 계산

문제 정리

  1. 참가자의 8문제 당 점수를 입력 받음
  2. 점수의 상위 5개가 최종 점수 , 최종 점수 출력
  3. 상위 5개에 해당하는 문제 번호 출력

접근법

1. 최종 점수 구하기 : 참가자의 점수를 배열에 저장 → sort()로 내림차순 정렬

sort(input_score, input_score + 8, greater<int>());

sort()는 오름차순 정렬 , 내림차순 정렬을 위해 greater()

최종 점수 = 정렬된 input_score을 0~4 인덱스까지 더하기

2. 맞힌 문제 번호 구하기 : 상위 5개의 점수에 해당하는 인덱스 + 1 = 문제 번호

find() 사용

for (int i = 0; i < 5; i++) {
	int index_Q = find(score.begin(), score.end(), input_score[i]) - score.begin();
	index[i] = index_Q + 1; //인덱스 값이라 1씩 더해줌
}

sort(index, index + 5); //앞 번호부터 출력해야하므로 sort 오름차순 정렬

find()함수 사용을 위해 input_score를 score벡터에 그대로 복사

#include <vector>

int main() {
	int input_score[8] = { 0, }; //배열 선언
	vector<int> score; //벡터 선언

	for (int i = 0; i < 8; i++) {
		cin >> input_score[i];
		score.push_back(input_score[i]);
	}
}

전체코드

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

int main() {
	int input_score[8] = { 0, };
	vector<int> score;

	//점수 입력받기
	for (int i = 0; i < 8; i++) {
		cin >> input_score[i];
		score.push_back(input_score[i]);
	}

	//내림차순 정렬
	sort(input_score, input_score + 8, greater<int>());

	int final_score = 0;
	int index[5] = { 0, };

	//최상위 점수 5개 더하기
	for (int i = 0; i < 5; i++) {
		final_score += input_score[i]; 
		// 상위 5위에 해당하는 문제 번호 찾기, 인덱스 찾기
		int index_Q = find(score.begin(), score.end(), input_score[i]) - score.begin();
		index[i] = index_Q + 1;
	}

	cout << final_score << endl;
	sort(index, index + 5);

	for (int i = 0; i < 5; i++) {
		cout << index[i] << " ";
	}

	return 0;
}
profile
Good day

0개의 댓글