3등의 성적은?


N명의 수학성적이 주어지면 그 중 3등을 한 수학성적을 출력하는 프로그램을 작성하세요.

만약 학생의 점수가 100점이 3명, 99점이 2명, 98점이 5명, 97점이 3명 이런식으로 점수가 분포되면 1등은 3명이며, 2등은 2명이며 3등은 5명이 되어 98점이 3등을 한 점수가 됩니다.

▣ 입력설명
첫 번째 줄에 자연수 N(1<=N<=100)이 주어집니다.

두 번째 줄에 N개의 수학성적 점수가 공백을 사이에 두고 입력됩니다. 수학성적 점수는 100점 만점 기준으로 입력됩니다.

▣ 출력설명
3등을 한 점수를 출력합니다.

▣ 입력예제 1 
7
80 96 75 82 96 92 100

▣ 출력예제 1
92


풀이

등수가 변하는 것은 이전 점수와 달라졌을 때만 달라지도록 새로운 변수를 두어서 풀었다.

void solve()
{
	int n;
	cin >> n;

	vector<int> seq(n);
	for (int i = 0; i < n; ++i)
		cin >> seq[i];

	int idx, line = 1; // line이 등수 관리함

	for (int i = 0; i < seq.size() - 1; ++i)
	{
		idx = i;
		for (int j = i + 1; j < seq.size(); ++j)
		{
			if (seq[j] > seq[idx])
				idx = j;
		}

		swap(seq[i], seq[idx]);
	}

	int score = seq[0], res;
	for (int i = 1; i < seq.size(); ++i)
	{
		if (score != seq[i])
		{
			line++;
			score = seq[i];
		}

		if (line == 3)
		{
			cout << seq[i];
			return;
		}
	}
	
}

전체 코드

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>

using namespace std;

void solve()
{
	int n;
	cin >> n;

	vector<int> seq(n);
	for (int i = 0; i < n; ++i)
		cin >> seq[i];

	int idx, line = 1; // line이 등수 관리함

	for (int i = 0; i < seq.size() - 1; ++i)
	{
		idx = i;
		for (int j = i + 1; j < seq.size(); ++j)
		{
			if (seq[j] > seq[idx])
				idx = j;
		}

		swap(seq[i], seq[idx]);
	}

	int score = seq[0], res;
	for (int i = 1; i < seq.size(); ++i)
	{
		if (score != seq[i])
		{
			line++;
			score = seq[i];
		}

		if (line == 3)
		{
			cout << seq[i];
			return;
		}
	}
	
}

int main() 
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	//freopen("input.txt", "rt", stdin);

	solve();

	return 0;
}