문제 접근법 :
이름에서 알파벳 종류의 개수가 많은 학생이 반장이된다고 합니다.
예:쓰여진 알파벳 종류만 찾으면됩니다.
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<string, int> 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 |