PS (C, C++)

[백준/C & C++] 25305 커트라인

최연재 2022. 9. 15. 01:22

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

 

25305번: 커트라인

시험 응시자들 가운데 1등은 100점, 2등은 98점, 3등은 93점이다. 2등까지 상을 받으므로 커트라인은 98점이다.

www.acmicpc.net

코드 (C)

#include <stdio.h>

void swap(int* a, int* b)
{
	int tmp = *a;
	*a = *b;
	*b = tmp;
}

int main()
{
	int n, m, arr[1001];
	scanf("%d %d", &n, &m);

	for (int i = 0; i < n; i++) scanf("%d", &arr[i]);

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n - 1 - i; j++)
		{
			if (arr[j] < arr[j + 1]) swap(&arr[j], &arr[j + 1]);
		}
	}

	printf("%d", arr[m - 1]);
	return 0;
}

코드 (C++)

#include <iostream>
using namespace std;

void swap(int *a, int *b)
{
	int tmp = *a;
	*a = *b;
	*b = tmp;
}

int main()
{
	int arr[1001] = {0,};
	int n, k;

	cin >> n >> k;
	for (int i = 0; i < n; i++) cin >> arr[i];
	
	for (int i = 0; i < n - 1; i++)
	{
		for (int j = 0; j < n - 1 - i; j++)
		{
			if (arr[j] < arr[j + 1]) swap(&arr[j], &arr[j + 1]);
		}
	}
	cout << arr[k - 1];
	return 0;
}

코드설명 

입력받은 점수들을 내림차순으로 정렬 후 상을 받는 사람 수-1 인덱스에 저장되어 있는 값을 출력하면 된다. 

 

응시자 수와 상을 받는 인원 수를 n,k로 입력받는다. 

이후 반복문을 사용해서 배열에 입력받는 점수들을 차례로 저장한다. 

버블정렬을 사용해서 내림차순으로 정렬한다. 

 

arr[k-1] 을 출력하고 프로그램을 종료한다. 

느낀 점

내가 개인적으로 버블정렬을 좋아해서 제한된 시간이 너무 짧지 않으면 버블정렬을 사용하는 편이다. 

배열을 통해 점수들을 저장하고 특정 인덱스의 값을 출력하는 방식으로 금방 풀었다.