𝘚𝘭𝘰𝘸 𝘣𝘢𝘡 𝘴𝘡𝘦𝘒π˜₯𝘺

[λ°±μ€€] 10814번: λ‚˜μ΄μˆœ μ •λ ¬ - C++ λ³Έλ¬Έ

μ½”λ”©ν…ŒμŠ€νŠΈ μ€€λΉ„/λ°±μ€€

[λ°±μ€€] 10814번: λ‚˜μ΄μˆœ μ •λ ¬ - C++

.23 2021. 7. 11. 03:10
문제

온라인 저지에 κ°€μž…ν•œ μ‚¬λžŒλ“€μ˜ λ‚˜μ΄μ™€ 이름이 κ°€μž…ν•œ μˆœμ„œλŒ€λ‘œ 주어진닀. μ΄λ•Œ, νšŒμ›λ“€μ„ λ‚˜μ΄κ°€ μ¦κ°€ν•˜λŠ” 순으둜, λ‚˜μ΄κ°€ κ°™μœΌλ©΄ λ¨Όμ € κ°€μž…ν•œ μ‚¬λžŒμ΄ μ•žμ— μ˜€λŠ” μˆœμ„œλ‘œ μ •λ ¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

μž…λ ₯

첫째 쀄에 온라인 저지 νšŒμ›μ˜ 수 N이 주어진닀. (1 ≤ N ≤ 100,000)

λ‘˜μ§Έ 쀄뢀터 N개의 μ€„μ—λŠ” 각 νšŒμ›μ˜ λ‚˜μ΄μ™€ 이름이 곡백으둜 κ΅¬λΆ„λ˜μ–΄ 주어진닀. λ‚˜μ΄λŠ” 1보닀 ν¬κ±°λ‚˜ κ°™μœΌλ©°, 200보닀 μž‘κ±°λ‚˜ 같은 μ •μˆ˜μ΄κ³ , 이름은 μ•ŒνŒŒλ²³ λŒ€μ†Œλ¬Έμžλ‘œ 이루어져 있고, 길이가 100보닀 μž‘κ±°λ‚˜ 같은 λ¬Έμžμ—΄μ΄λ‹€. μž…λ ₯은 κ°€μž…ν•œ μˆœμ„œλ‘œ 주어진닀.

 

좜λ ₯

첫째 쀄뢀터 총 N개의 쀄에 걸쳐 온라인 저지 νšŒμ›μ„ λ‚˜μ΄ 순, λ‚˜μ΄κ°€ κ°™μœΌλ©΄ κ°€μž…ν•œ 순으둜 ν•œ 쀄에 ν•œ λͺ…μ”© λ‚˜μ΄μ™€ 이름을 곡백으둜 ꡬ뢄해 좜λ ₯ν•œλ‹€.

 


μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜λŠ” 문제.

μ•žμ„œ ν’€μ—ˆλ˜ λ¬Έμ œλ“€μ€ μ „λΆ€ 병합 μ •λ ¬λ‘œ ν’€μ—ˆλŠ”λ°(μΆ”ν›„ ν¬μŠ€νŒ… μ˜ˆμ •), μ½”λ“œλ„ κΈΈκ³  계속 같은 μ½”λ“œλ₯Ό λŒλ €μ“°λŠ” 것이 영 λ§ˆμŒμ— μ•ˆλ“€μ–΄μ„œ λ‚΄μž₯ ν•¨μˆ˜λ₯Ό ν•œλ²ˆ 써보고 μ‹Άμ–΄ 쑰금 κ΅¬κΈ€λ§ν•΄μ„œ algorithm 헀더에 λ‚΄μž₯된 stable_sort() λ₯Ό μ‚¬μš©ν•˜μ—¬ ν’€μ—ˆλ‹€.

이거 λ¨Όμ € ν¬μŠ€νŒ…ν•˜λŠ” μ΄μœ λŠ” ν’€κ³  μ’€ 감λͺ…λ°›μ•„μ„œ...

 

νšŒμ›μ„ λ‚˜μ΄ 순, λ‚˜μ΄κ°€ κ°™μœΌλ©΄ κ°€μž…ν•œ 순 으둜 μ •λ ¬ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— 같은 λ‚˜μ΄μΌ 경우 정렬을 ν•˜λ©΄μ„œ ν€΅μ†ŒνŠΈ 같이 μ •λ ¬ κ³Όμ •μ—μ„œ μˆœμ„œκ°€ λ°”λ€” 수 μžˆλŠ” λΆˆμ•ˆμ • μ •λ ¬(unstable sort)이 μ•„λ‹Œ, λ“€μ–΄μ˜¨ μˆœμ„œλŒ€λ‘œ 정렬이 λ˜λŠ” μ•ˆμ • μ •λ ¬(stable sort)을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— sort()κ°€ μ•„λ‹Œ stable_sort() λ₯Ό μ‚¬μš©ν•œλ‹€.

λ‚˜μ΄μ™€ 이름을 번거둭게 κ΅¬μ‘°μ²΄λ‚˜ 클래슀λ₯Ό 톡해 μ •μ˜ν•˜μ§€ μ•Šκ³  μ‚¬μš©ν•˜κΈ° μœ„ν•΄ pair 클래슀λ₯Ό μ‚¬μš©ν•˜μ˜€λ‹€.

 

이름을 string 클래슀둜 μ„€μ •ν•˜μ—¬ λΆˆκ°€ν”Όν•˜κ²Œ scanf / printf λŒ€μ‹  cin / cout 을 μ‚¬μš©ν•˜μ˜€λŠ”λ° κ·Έλž˜μ„œ κ·ΈλŸ°κ°€ μ œμΆœν–ˆλ”λ‹ˆ μ‹œκ°„μ΄ˆκ³Όκ°€ λ‚˜λ”λΌ.. μ–΄λ–»κ²Œ ν•΄κ²°ν•΄μ•Όλ˜λ‚˜ μ‹Άμ–΄ κ²€μƒ‰ν•΄λ΄€λ”λ‹ˆ λ§ˆμ§€λ§‰μ— κ°’ 좜λ ₯해쀄 λ•Œ μ€„λ°”κΏˆμœΌλ‘œ endl λŒ€μ‹  "\n"으둜만 λ°”κΏ”μ€˜λ„ μ •λ‹΅μ²˜λ¦¬κ°€ λœλ‹€ ν•˜λ”λΌκ³ ?? μ†λŠ” μ…ˆ 치고 κ·Έκ±° ν•˜λ‚˜λ§Œ λ°”κΏ”μ€¬λ”λ‹ˆ μ΄μ™œμ§„.. μ•žμœΌλ‘œ μœ μš©ν•˜κ²Œ μ‚¬μš©ν•  것 κ°™λ‹€.

 

μ½”λ“œ
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>

using namespace std;

bool compare(pair<int, string> a, pair<int, string> b) {
    return (a.first < b.first);
}

int main(void) {
    int n;
    scanf("%d", &n);
    vector<pair<int, string> > list(n);

    for(int i = 0; i < n; i++) {
        cin >> list[i].first >> list[i].second;
    }

    stable_sort(list.begin(), list.end(), compare);

    for(int i = 0; i < n; i++) {
        cout << list[i].first << " " << list[i].second << "\n";
    }
    return 0;
}
Comments