백준문제풀이
백준 문제 24509번 상품의 주인은? 문제풀이 c++
노가다 김씨
2022. 3. 6. 21:45
https://www.acmicpc.net/problem/24509
24509번: 상품의 주인은?
혜민이네 반은 총 $N$명의 학생으로 이루어져 있으며 학생마다 번호가 다르게 배정되어 있다. 이번 시험은 국어, 영어, 수학, 과학 총 4과목으로 진행되며, 학생들이 공부를 열심히 할 수 있게 과
www.acmicpc.net
문제 해석
문제를 읽고 정렬하면 될거같았다.
과목이 4개이므로 벡터 4개를 만들고 점수는 0점부터 100점이 존재하니까 1개 벡터당 0~100 101개의 벡터를 만들어주었다.
중복된 학생이 상을 타면안되므로 방문 배열을 만들어서 상을 이미 이전에 받은적이 있다면 상을 주지않게하였다.
A B C D는 순서대로 국영수과이다.
예를들어 28번 학생이 국어 84점을 받았다면 A[84]에 28번을 넣어준다.
이 행위가 전부 끝나면 A B C D를 각각 정렬해주고 A[100]에서 A[0]까지 상을 한명 줄때까지 반복후 종료
그 뒤 B[100]에서 B[0]까지 ... 그 뒤 C[100]에서 C[0]까지 .... 그뒤 D[100]에서 D[0]까지 그럼 끝.
코드
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void print_A();
void print_B();
void print_C();
void print_D();
bool visited[200001];
vector <int> A[101];
vector <int> B[101];
vector <int> C[101];
vector <int> D[101];
int main(){
cout.tie(NULL);
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int N,X,inputA,inputB,inputC,inputD;;
cin>>N;
for(int i=0; i<N; i++)
{
cin>>X>>inputA>>inputB>>inputC>>inputD;
A[inputA].push_back(X);
B[inputB].push_back(X);
C[inputC].push_back(X);
D[inputD].push_back(X);
}
for(int i=0; i<101; i++)
{
sort(A[i].begin(),A[i].end());
sort(B[i].begin(),B[i].end());
sort(C[i].begin(),C[i].end());
sort(D[i].begin(),D[i].end());
}
print_A();
print_B();
print_C();
print_D();
}
void print_A(){
for(int i=100; i>=0; i--)
{
for(int j=0; j<A[i].size(); j++)
{
cout<<A[i][j]<<" ";
visited[A[i][j]]=1;
return;
}
}
}
void print_B(){
for(int i=100; i>=0; i--)
{
for(int j=0; j<B[i].size(); j++)
{
if(visited[B[i][j]]==1)
{
continue;
}
else
{
cout<<B[i][j]<<" ";
visited[B[i][j]]=1;
return;
}
}
}
}
void print_C(){
for(int i=100; i>=0; i--)
{
for(int j=0; j<C[i].size(); j++)
{
if(visited[C[i][j]]==1)
{
continue;
}
else
{
cout<<C[i][j]<<" ";
visited[C[i][j]]=1;
return;
}
}
}
}
void print_D(){
for(int i=100; i>=0; i--)
{
for(int j=0; j<D[i].size(); j++)
{
if(visited[D[i][j]]==1)
{
continue;
}
else
{
cout<<D[i][j]<<" ";
visited[D[i][j]]=1;
return;
}
}
}
}
나중에 생각난것인데 그냥 sort 정렬 기준을 점수는 오름차순 출석번호는 내림차순으로 정렬해주게끔 cmp함수를 작성하는것이 훨씬 코드가 짧을거같다.