본문 바로가기
SWEA

[SWEA] 7792 반장 선출

by 콩순이냉장고 2020. 9. 15.

문제 URL : swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWsBNHuqMMADFARG&categoryId=AWsBNHuqMMADFARG&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

문제 접근법 :

이름에서 알파벳 종류의 개수가 많은 학생이 반장이된다고 합니다.

예:쓰여진 알파벳 종류만 찾으면됩니다.

BBIBBI - >B I 2개 , DEAD BEEF ->DEABF 5개 ABCDDCBA ->ABCD 4개

따라서 DEAD BEEF

그치만 조건은 최대값을 가진 애중에 같은 값일경우 이름의 사전순중에 가장앞에 있는것

ABC -> ABC 3개 , AAAA BBBB CCCC-> ABC 3개 이때 사전순으로 AAAA BBBB CCCC가 앞서기 때문에

AAAA BBBB CCCC를 출력하면됩니다. MAP 또는 unordered_map 을 사용하고 정렬만 해주면 됩니다.

문제는 어렵지 않았는데 d4정도의 레벨을 갖고있다는게 좀 의아했습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//By 콩순이냉장고2번
#include <string>
#include <vector>
#include <unordered_map>
#include <iostream>
#include<algorithm>
using namespace std;
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int te;
    cin >> te;
    for (int test = 1; test <= te; test++)
    {
        int n;
        unordered_map<stringint> student;
        cin >> n;
        cin.ignore();//버퍼 비우기
        int Max = 0;
        for (int i = 0; i < n; i++)
        {
            string s;
            getline(cin, s);
            int visit[26= { 0 };//쓰여진 알파벳종류를 확인하기위해
            int cnt = 0;
            for (int i = 0; i < s.size(); i++)
            {
                if (s[i] != ' ')//스페이스만 아니면 전부 알파벳
                    visit[s[i] - 'A']++//편의상 증가시켰는데 사실 1을 써도됨
            }
            for (int i = 0; i < 26; i++)//알파벳종류개수 세기
            {
                if (visit[i])
                    cnt++;
            }
            student[s] = cnt;
            Max = Max < cnt ? cnt : Max;//알파벳종류중에 가장 큰값을 갱신
        }
        vector<string> res;
        for (auto it : student){//이름들중에 최대값이랑 같은것을 찾아 res에 넣음
            if (it.second == Max)
                res.push_back(it.first);
        }
        sort(res.begin(), res.end());//사전순으로 출력하기위해 정렬
        cout << "#" << test << " " << res[0<< "\n";
    }
}
cs

 

 

모르는점 혹은 궁금한점 혹은 코드의 오류가 있다면 언제든지 댓글을 이용해주시길 바랍니다.

'SWEA' 카테고리의 다른 글

[SWEA] 4013 특이한 자석 (모의 SW 역량테스트)  (0) 2020.09.27
[SWEA] 9940 순열1  (0) 2020.09.15
[SWEA] 4615 재미있는 오셀로 게임  (0) 2020.09.15
[SWEA] 9708 가장 긴 수열  (0) 2020.08.11
[SWEA] 10059 유효기간  (0) 2020.08.11