티스토리 뷰

Algorithm/BOJ

백준 2822번 C++

poopooreum 2023. 8. 14. 11:41
반응형
백준 2822번 점수 계산

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

2822번: 점수 계산

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

www.acmicpc.net



정답 코드

#include<iostream>
int arr[8];
using namespace std;

void quick(int a[], int start, int end);
int main() {
	int res[5];
	int arr2[8];
	for (int x = 0; x < 8; x++)
		cin >> arr[x];
	for (int x = 0; x < 8; x++)
		arr2[x] = arr[x];
	quick(arr2, 0, 7);
	int sum = 0;
	for (int x = 7; x >= 3; x--)
		sum += arr2[x];
	cout << sum<<endl;
	for (int x = 0; x < 8; x++) {
		if (arr2[7] == arr[x]) {
			int cnt = x + 1;
			res[4] = cnt;
		}
	}
	for (int x = 0; x < 8; x++) {
		if (arr2[6] == arr[x]) {
			int cnt = x + 1;
			res[3] = cnt;
		}
	}
	for (int x = 0; x < 8; x++) {
		if (arr2[5] == arr[x]) {
			int cnt = x + 1;
			res[2] = cnt;
		}
	}
	for (int x = 0; x < 8; x++) {
		if (arr2[4] == arr[x]) {
			int cnt = x + 1;
			res[1] = cnt;
		}
	}
	for (int x = 0; x < 8; x++) {
		if (arr2[3] == arr[x]) {
			int cnt = x + 1;
			res[0] = cnt;
		}
	}
	quick(res, 0, 4);
	for (int x = 0; x < 5; x++)
		cout << res[x] << " ";
}
void quick(int a[], int start, int end) {
	int key = start;
	int i = start + 1;
	int j = end;
	if (start >= end)
		return;
	while (i <= j) {
		while (a[i] <= a[key])
			i++;
		while (a[j] >= a[key]&&j>start)
			j--;
		if (i > j)
			swap(a[j], a[key]);
		else
			swap(a[j], a[i]);
	}
	quick(a, start, j - 1);
	quick(a, j + 1, end);
}

문제 풀이

퀵 정렬을 이용해서 풀었습니다. 피벗값을 통해 정렬을 하는 알고리즘으로   내장된 sort함수는 퀵 정렬을 기반으로 하며 시간 복잡도는 O(nlogn)입니다.
다만 최악의 경우 O(N^2)입니다.

반응형

'Algorithm > BOJ' 카테고리의 다른 글

백준 2869번 C++  (0) 2023.08.14
백준 2845번 C++  (0) 2023.08.14
백준 2798번 C++  (0) 2023.08.13
백준 2776번 C++  (0) 2023.08.13
백준 2754번 C++  (0) 2023.08.13
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함