it 취업을 위한 알고리즘 문제풀이 입문 : 33. 3등의 성적은?
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;
}