새소식

💻 Computer/🐘 Algorithm

10825 - c++

  • -

요약

1. 국어는 내림차순

2. 국어점수각 같다면 영어는 오름차순

3. 국, 영이 같다면 수학은 내림차순

4. 모두 같다면 이름은 사전순


문제를 풀며

솔직히 어려운 문제는 아니었다 정말 쉬운 문제 였다, 그런데도 글을 쓰는 이유는 답을 맞추고 다른 사람의 코드를 보는데 정말 창의 적인 아이디어를 보았기 때문이다. 이걸 글로 쓰지 않으면 바보 라는 생각이 들어 내 손이 저절로 움직였다. 그럼 풀이를 시작하겠다.


처음 나의 코드

#include <bits/stdc++.h>

using namespace std;
void init(){
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
}

int n;

bool cmp(const tuple<int, int, int, string> &a, const tuple<int, int, int, string> &b){
  int akr, aen, amt, bkr, ben, bmt;
  string aname, bname;
  tie(akr, aen, amt, aname) = a;
  tie(bkr, ben, bmt, bname) = b;
  if(akr != bkr) return akr > bkr;
  if(aen != ben) return aen < ben;
  if(amt != bmt) return amt > bmt;
  return aname < bname;
}

int main(){
  init();
  cin >> n;
  vector<tuple<int, int, int, string>> student;
  for(int i =0; i < n; ++i){
    string name;
    int kr, en, mt;
    cin >> name >> kr >> en >> mt;
    student.push_back({kr, en, mt, name});
  }
  sort(student.begin(), student.end(), cmp);
  for(auto i : student)cout<<get<3>(i) << '\n';
  return 0;
}

무난하게 풀었다. cmp 비교 함수를 정의 하고 조건에 맞게 구현 했다. 

그런데 다른 사람의 구현을 보고 난 내가 구현한 코드가 정말 꼴도보기 싫었다.


다른 사람의 풀이

#include <bits/stdc++.h>

using namespace std;
void init(){
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
}

int n;

int main(){
  init();
  cin >> n;
  vector<tuple<int, int, int, string>> student;
  for(int i =0; i < n; ++i){
    string name;
    int kr, en, mt;
    cin >> name >> kr >> en >> mt;
    student.push_back({-kr, en,-mt, name});
  }
  sort(student.begin(), student.end());
  for(auto i : student)cout<<get<3>(i)<<'\n';
  return 0;
}

국어는 내림차순 이다 그런데 국어점수를 입력 받을때 ( - )를 붙여 준다 왜일까?

밑에서 sort 함수를 쓸 때 편하게 하기 위해서 이다.

기본적으로 sort함수는 오름 차순으로 정렬 한다. 그런데 입력 받을때 ( - )를 붙여 준다면 가장 큰 것이 가장 작은게 된다.

100 -> -100

그래서 우리는 자연 스럽게 기본적인 sort 만으로도 내림차순 정렬을 할 수 있게 된것이다.

 

정말 이 분의 풀이를 보고 감탄을 금치 못했다. 너무 정말 너무 신기 했다. 어떻게 이런 생각을 한 걸까 싶다 나중에 비슷한 문제가 나온다면 사용해 봐야 겠다.

그때 내 머리속에서 떠오른 다면

'💻 Computer > 🐘 Algorithm' 카테고리의 다른 글

1463 - c++  (0) 2023.06.01
14923 - c++  (0) 2023.06.01
11652 - c++  (0) 2023.05.31
14502 - c++  (0) 2023.05.31
13460 - c++  (0) 2023.05.31
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.