문제)
https://softeer.ai/practice/6250
Softeer - 현대자동차그룹 SW인재확보플랫폼
softeer.ai
풀이)
main 함수
1) 성적은 2차원 배열로 입력받는다. 이때 두개의 배열에 받는데, 하나의 배열은 정렬해서 사용하고, 하나는 답을 도출할때 쓸 일반 배열로 사용한다.
2) 배열의 4번째 행은 개인의 각 대회 점수의 총합으로 사용한다.
check함수
1) check함수는 대회에서 개인의 점수가 몇등인지 를 map으로 만들어주는 함수이다.
2) 각 대회의 번호를 num, 각 대회의 map을 m의 매개변수로 받는다.
3) temp 변수에 정렬된 첫번째 점수값을 넣는다. map에 이 점수를 1로 맵핑한다. (1등)
4) 배열을 따라가며 temp값과 배열값이 다르다면, 이전 사람보다 더 적은 점수인것을 의미하므로, index를 이용해 내가 몇등인지를 map에 저장한다. temp를 현재 점수로 변경한다.
코드)
#include <bits/stdc++.h>
using namespace std;
int n;
int score[4][100001];
int s_score[4][100001];
map <int,int> m1, m2, m3, m4;
void check(int num, map<int, int>&m){
int temp = s_score[num][0];
m[temp]++;
for (int i = 1; i < n; ++i) {
if(temp != s_score[num][i]){
m[s_score[num][i]] = i + 1;
temp = s_score[num][i];
}
}
}
int main() {
cin >> n;
int num;
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < n; ++j) {
cin >> num;
score[i][j] = num;
s_score[i][j] = num;
}
}
for (int i = 0; i < n; ++i) {
int sum = score[0][i]+score[1][i]+score[2][i];
score[3][i] = sum;
s_score[3][i] = sum;
}
for (int i = 0; i < 4; ++i) {
sort(s_score[i], s_score[i]+n,greater<>());
}
check(0,m1);
check(1,m2);
check(2,m3);
check(3,m4);
for (int i = 0; i < n; ++i) {
cout << m1[score[0][i]] << " ";
}
cout << "\n";
for (int i = 0; i < n; ++i) {
cout << m2[score[1][i]] << " ";
}
cout << "\n";
for (int i = 0; i < n; ++i) {
cout << m3[score[2][i]] << " ";
}
cout << "\n";
for (int i = 0; i < n; ++i) {
cout << m4[score[3][i]] << " ";
}
}
P.S)
알고리즘 초보이지만...
HSAT는 별로 유명하지 않아서 찾아봐도 풀이도 적고 나랑 다른 풀이가 많아서 내가 푼 풀이를 올려보았다....
'알고리즘 문제 풀이 > SOFTEER' 카테고리의 다른 글
소프티어 [HSAT 3회 정기 코딩 인증평가 기출] 교차로 (C++) (1) | 2024.03.23 |
---|---|
소프티어 [HSAT 2회 인증평가 기출] 사물인식 최소 면적 산출 프로그램 (C++) (0) | 2024.03.20 |