본문 바로가기
Algorythms

백준 11557번 Yangjojang of The Year c++ 풀이

by 준형코딩 2023. 11. 25.

문제

입학 OT때 누구보다도 남다르게 놀았던 당신은 자연스럽게 1학년 과대를 역임하게 되었다.

타교와의 조인트 엠티를 기획하려는 당신은 근처에 있는 학교 중 어느 학교가 술을 가장 많이 먹는지 궁금해졌다.

학교별로 한 해동안 술 소비량이 주어질 때, 가장 술 소비가 많은 학교 이름을 출력하여라.

입력

입력의 첫 줄에는 테스트 케이스의 숫자 T가 주어진다.

매 입력의 첫 줄에는 학교의 숫자 정수 N(1 ≤ N ≤ 100)이 주어진다.

이어서 N줄에 걸쳐 학교 이름 S(1 ≤ |S| ≤ 20, S는 공백없는 대소문자 알파벳 문자열)와 해당 학교가 지난 한 해동안 소비한 술의 양 L(0 ≤ L ≤ 10,000,000)이 공백으로 구분되어 정수로 주어진다.

같은 테스트 케이스 안에서 소비한 술의 양이 같은 학교는 없다고 가정한다.

출력

각 테스트 케이스마다 한 줄에 걸쳐 술 소비가 가장 많은 학교의 이름을 출력한다.

예제 입력 1 복사

2
3
Yonsei 10
Korea 10000000
Ewha 20
2
Yonsei 1
Korea 10000000

예제 출력 1 복사

Korea
Korea

 

 

 

간단한 정렬 문제

최근에 자바 언어를 많이 공부하면서 느낀 점으로는 C++이 무조건 알고리즘에 있어서 최고라고 생각했는데 문자열을 다룰 때는 java의 split이나 다른 기능들이 굉장히 편한 게 많은 것 같다. C++에서 split 기능을 구현하려면 직접 메서드를 만들어줘야 하는데 자바에서는 그러지 않아도 되니 큰 장점을 가지고 있는듯하다. 하지만 이번 문제같이 문자열을 기준으로 점수를 입력받고 정렬을 해야 할 때는 C++에서는 pair<int,string>을 통해서 정숫값을 key로 해서 입력받고 정렬을 해버리면 바로 문자열의 값들을 오름차순으로 정렬할 수 있지만 자바에서는 pair기능이 없어서 정렬이 힘들다는 단점이 있었다. 코딩테스트에서는 자바와 c++ 모두 사용가능하니 상황에 따라서 적절하게 사용해야 겠다는 생각을 하게 되었다.

 

+ 최근에 알고리즘을 놓고 자바에 굉장히 집중을 했더니 C++로 알고리즘을 푸는데 간단한 명령어가 기억 안 나는 경험을 했다 ㅜㅜ 500문제가 넘는 문제를 C++로 풀었는데 잠깐 안 했다고 명령어를 깜빡하다니..  아무래도 자바에서 맵 선언은 Map<String,Integer> map =e new HashMap<>() 이런 식으로 String,Integer 대문자로 자료형을 선언해 주는데 c++ 에서는 map<string,int> 이런 식으로 소문자로 하다 보니 헷갈리는 게 생긴 것 같다.. 앞으로 주 언어는 JAVA로 확실하게 갈 것 이지만 코딩테스트에서 상황에 따라 c++과 java를 번갈아가면서 사용할 수 있게 c++이 녹슬면 안되니 번갈아가면서 잘 연습 해 주자.

 

 

- c++ 코드

 

#include <bits/stdc++.h>

using namespace std;

int main() {
    int t;
    cin >> t;

    while(t--){
        int n ;
        cin >> n ;

        vector<pair<int,string>>v;

        for(int i = 0 ; i < n ; i++){
            string s;
            int l;
            cin >> s;
            cin >> l;
            v.push_back({l,s});
        }

        sort(v.begin(),v.end(),greater<>());

        cout << v[0].second << "\n";
    }
}