문제 링크
난이도 : Lv. 0

문제 내용

문제 설명

문자열 배열 strArr이 주어집니다. strArr의 원소들을 길이가 같은 문자열들끼리 그룹으로 묶었을 때 가장 개수가 많은 그룹의 크기를 return 하는 solution 함수를 완성해 주세요.


제한사항
  • 1 ≤ strArr의 길이 ≤ 100,000
    • 1 ≤ strArr의 원소의 길이 ≤ 30
    • strArr의 원소들은 알파벳 소문자로 이루어진 문자열입니다.

입출력 예
strArrresult
[“a”,“bc”,“d”,“efg”,“hi”]2

입출력 예 설명

입출력 예 #1

  • 각 문자열들을 길이에 맞게 그룹으로 묶으면 다음과 같습니다.
문자열 길이문자열 목록개수
1[“a”,“d”]2
2[“bc”,“hi”]2
3[“efg”]1
  • 개수의 최댓값은 2이므로 2를 return 합니다.

문제 분석

문자열 개수에 따른 맵을 만들어서 그걸로 비교

작성한 코드

#include <string>
#include <vector>
#include <unordered_map>
#include <algorithm>
 
using namespace std;
 
bool cmp(pair<int, int> &a, pair<int, int> &b){
    return a.second > b.second;
}
 
int solution(vector<string> strArr) {
    int answer = 0;
    unordered_map<int, int> m;
    for(auto &s : strArr) {
        m[s.size()]++;
    }
    
    vector<pair<int, int>> p(m.begin(), m.end());
    sort(p.begin(), p.end(), cmp);
    
    return p.front().second;
}

우수 코드 분석

#include <string>
#include <vector>
#include <algorithm>
using namespace std;
 
int solution(vector<string> strArr) {
    vector<int> lengths(31,0);
    for(string str : strArr)
    {
        lengths[str.length()]++;
    }
    return *max_element(lengths.begin(),lengths.end());
}

아이디어는 비슷했는데 더 간단하게 쓰신듯.. max_element 까먹지말기