[C++] 백준 알고리즘 풀이: 5635

봄바야·2021년 11월 2일
0

BOJ

목록 보기
1/1
post-thumbnail

📄 문제

어떤 반에 있는 학생들의 생일이 주어졌을 때, 가장 나이가 적은 사람과 가장 많은 사람을 구하는 프로그램을 작성하시오.

📝 입력

첫째 줄에 반에 있는 학생의 수 n이 주어진다. (1 ≤ n ≤ 100)

다음 n개 줄에는 각 학생의 이름과 생일이 "이름 dd mm yyyy"와 같은 형식으로 주어진다. 이름은 그 학생의 이름이며, 최대 15글자로 이루어져 있다. dd mm yyyy는 생일 일, 월, 연도이다. (1990 ≤ yyyy ≤ 2010, 1 ≤ mm ≤ 12, 1 ≤ dd ≤ 31) 주어지는 생일은 올바른 날짜이며, 연, 월 일은 0으로 시작하지 않는다.

이름이 같거나, 생일이 같은 사람은 없다.

📥 input

5
Mickey 1 10 1991
Alice 30 12 1990
Tom 15 8 1993
Jerry 18 9 1990
Garfield 20 9 1990

📤 output

Tom
Jerry

💡 풀이 방법

처음엔 string으로 년+월+일 합쳐서 sort 하려고 했습니다. 근데 예시가 09월이었으면 가능했을텐데 월,일에 0이 없어서 예외처리로 10 이하일 때 0 붙일까 하다가.... vector 써야겠다 싶었습니다.

vector와 pair을 사용해서 배열을 받고 년도, 월, 일, 이름 순으로 받았습니다.
타입이 같았으면 이중 vector를 사용했을 텐데 string이랑 int를 같이 저장하기 위해 pair를 사용했습니다.
algorithm을 사용하여 sort 함수를 사용하니 한번에 정렬이 가능했습니다.

+

swift로 풀었다면 struct로 구조체 만들어서 저장하던가 Dictionary로 저장했을듯.. Date를 key값으로 해서 저장하기,,
근데 구현 안해봐서 되는지는 모름 🤔

🔥 코드

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int n=0;
    cin >> n;
    vector<pair<pair<int, int>, pair<int, string> > > arr(n);
    
    for(int i=0; i<n; i++) {
        cin >> arr[i].second.second >> arr[i].second.first >> arr[i].first.second >> arr[i].first.first;
    }

    sort(arr.begin(),arr.end());
    cout << arr[n-1].second.second << "\n" << arr[0].second.second;
}

👀 느낀 점

앞으로 pair랑 vector를 같이 사용하게 될 것 같습니다.


문제 👉 https://www.acmicpc.net/problem/5635

0개의 댓글