๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœจ Algorithm

[๋ฐฑ์ค€/C++] 20920๋ฒˆ: ์˜๋‹จ์–ด ์•”๊ธฐ๋Š” ๊ดด๋กœ์›Œ

by nitronium102 2022. 7. 17.

๋ฌธ์ œ

ํ™”์€์ด๋Š” ์ด๋ฒˆ ์˜์–ด ์‹œํ—˜์—์„œ ํ‹€๋ฆฐ ๋ฌธ์ œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์˜์–ด ๋‹จ์–ด ์•”๊ธฐ๋ฅผ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ ๊ณผ์ •์—์„œ ํšจ์œจ์ ์œผ๋กœ ์˜์–ด ๋‹จ์–ด๋ฅผ ์™ธ์šฐ๊ธฐ ์œ„ํ•ด ์˜์–ด ๋‹จ์–ด์žฅ์„ ๋งŒ๋“ค๋ ค ํ•˜๊ณ  ์žˆ๋‹ค. ํ™”์€์ด๊ฐ€ ๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ๋‹จ์–ด์žฅ์˜ ๋‹จ์–ด ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ฐจ๋ก€๋กœ ์ ์šฉํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง„๋‹ค.

  1. ์ž์ฃผ ๋‚˜์˜ค๋Š” ๋‹จ์–ด์ผ์ˆ˜๋ก ์•ž์— ๋ฐฐ์น˜ํ•œ๋‹ค.
  2. ํ•ด๋‹น ๋‹จ์–ด์˜ ๊ธธ์ด๊ฐ€ ๊ธธ์ˆ˜๋ก ์•ž์— ๋ฐฐ์น˜ํ•œ๋‹ค.
  3. ์•ŒํŒŒ๋ฒณ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์•ž์— ์žˆ๋Š” ๋‹จ์–ด์ผ์ˆ˜๋ก ์•ž์— ๋ฐฐ์น˜ํ•œ๋‹ค

โ€ŠM๋ณด๋‹ค ์งง์€ ๊ธธ์ด์˜ ๋‹จ์–ด์˜ ๊ฒฝ์šฐ ์ฝ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์™ธ์šธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธธ์ด๊ฐ€ M์ด์ƒ์ธ ๋‹จ์–ด๋“ค๋งŒ ์™ธ์šด๋‹ค๊ณ  ํ•œ๋‹ค. ํ™”์€์ด๊ฐ€ ๊ดด๋กœ์šด ์˜๋‹จ์–ด ์•”๊ธฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹จ์–ด์žฅ์„ ๋งŒ๋“ค์–ด ์ฃผ์ž.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์˜์–ด ์ง€๋ฌธ์— ๋‚˜์˜ค๋Š” ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜ N๊ณผ ์™ธ์šธ ๋‹จ์–ด์˜ ๊ธธ์ด ๊ธฐ์ค€์ด ๋˜๋Š” M์ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. (1≤N≤100000, 1≤M≤10)

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N+1๋ฒˆ์งธ ์ค„๊นŒ์ง€ ์™ธ์šธ ๋‹จ์–ด๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ์ด๋•Œ์˜ ์ž…๋ ฅ์€ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ฃผ์–ด์ง€๋ฉฐ ๋‹จ์–ด์˜ ๊ธธ์ด๋Š” 10์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค.

๋‹จ์–ด์žฅ์— ๋‹จ์–ด๊ฐ€ ๋ฐ˜๋“œ์‹œ 1๊ฐœ ์ด์ƒ ์กด์žฌํ•˜๋Š” ์ž…๋ ฅ๋งŒ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

ํ™”์€์ด์˜ ๋‹จ์–ด์žฅ์— ๋“ค์–ด ์žˆ๋Š” ๋‹จ์–ด๋ฅผ ๋‹จ์–ด์žฅ์˜ ์•ž์— ์œ„์น˜ํ•œ ๋‹จ์–ด๋ถ€ํ„ฐ ํ•œ ์ค„์— ํ•œ ๋‹จ์–ด์”ฉ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

ํ’€์ด

์ •๋ ฌ๊ณผ ๋งต์„ ์ด์šฉํ•œ ๋ฌธ์ œ์ด๋‹ค. 

1. ๊ธธ์ด๊ฐ€ M ์ด์ƒ์ธ ๋‹จ์–ด๊ฐ€ ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ, ๋‹จ์–ด์žฅ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

    (1) map์„ ์ด์šฉํ•ด ๋‹จ์–ด๊ฐ€ ๋‚˜์˜จ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์ค€๋‹ค.

    (2) ๋‹จ์–ด๊ฐ€ map์— ์—†๋Š” ๊ฒฝ์šฐ(์ค‘๋ณต์ด ์•„๋‹Œ ๊ฒฝ์šฐ) word_list์—๋„ ์ถ”๊ฐ€ํ•œ๋‹ค. 

2. sort๋ฅผ ์ด์šฉํ•ด word_list๋ฅผ ์ •๋ ฌํ•œ๋‹ค. ์ด ๋•Œ, ์•ŒํŒŒ๋ฒณ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์•ž์— ์žˆ๋Š” ๋‹จ์–ด๋ฅผ ์šฐ์„ ์œผ๋กœ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— a < b๋ฅผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. ( a > b๋กœ ๋ฌด์‹ฌ์ฝ” ํ•˜๋ฉด..์‹คํŒจ์˜ ๊ตด๋ ˆ์— ๊ฐ‡ํžˆ๊ฒŒ ๋œ๋‹ค )

#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;

map<string, int> word_cnt;

/*
 * ๊ธธ์ด๊ฐ€ m ์ด์ƒ์ธ ๋‹จ์–ด๋“ค๋งŒ ์•”๊ธฐ
 * 1) ์ž์ฃผ ๋‚˜์˜ค๋Š” ๋‹จ์–ด
 * 2) ๋‹จ์–ด ๊ธธ์ด ๊ธธ์ˆ˜๋ก
 * 3) ์•ŒํŒŒ๋ฒณ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์•ž์— ์žˆ๋Š” ๋‹จ์–ด
 */
bool cmp(const string &a, const string &b) {
    if (word_cnt[a] != word_cnt[b])
        return word_cnt[a] > word_cnt[b];
    if (a.length() != b.length())
        return a.length() > b.length();
    return a < b;
}

int main() {
    int n, m;
    string word;
    vector<string> word_list;

    // ์ž…๋ ฅ
    cin >> n >> m;
    while (n--) {
        cin >> word;

        if (word.length() < m)
            continue;
        if (!word_cnt[word])
            word_list.push_back(word);
        word_cnt[word]++;
    }

    // ์—ฐ์‚ฐ
    sort(word_list.begin(), word_list.end(), cmp);

    // ์ถœ๋ ฅ
    for (int i=0; i<word_list.size(); i++)
        cout << word_list[i] << "\n";
}

๋Œ“๊ธ€