https://www.acmicpc.net/problem/1302
한동안 서울에 방 잡고 이사한다 뭐다 해서 정신이 없었다. 백준이랑 블로그 글 올리는것도 정말 오랜만인거 같은데, 역시 ps는 꾸준히 풀어보는게 가장 좋다. 몇주 쉬고 이랬더니 감 다 죽었나보다. 이 문제는 map을 이용해서 각 단어가 얼만큼 나왔는지 개수를 세야하는 문제다. map을 이용해 푼다면 쉽게 풀리는 문제였지만, map 구조를 이용하지 않고 풀라고 하면 어떻게 풀어야하지? 모르겠다. 암튼 그렇다.
map을 선언해놓고 key값을 인자로 활용하여 map[key]++; 이런식으로 insert를 쓰지않고도 value값을 수정할 수 있다는 건 진작에 알았지만, 최종적으로 답을 도출하려면 최댓값을 찾아야 하는데 그 방법에서 고민을 많이 했다. 결론적으로는 그냥 algorithm헤더에 max를 활용하여 그냥 원시적으로 map의 begin 부터 end 까지 순회하면 찾고 출력하는 방식이었다. 뭔가 거창하게 코드가 있고 그럴줄 알았는데 진짜 있는 그대로 원시적이어서 놀랐다. 물론 이것도 찾아보면 다른 방법이 있기는 하겠지만, 아직은 실력이 부족하여 이정도로밖에 해결할 수 없을 것 같다.
begin부터 end까지 순회하는 방법은 이것도 원시적으로 map<string, int>::iterator iter처럼 iterator를 활용하여 구현할 수도 있지만, 그냥 auto 때리면 되긴 한다. auto it = m.begin(); 이런식으로. 필자는 그냥 정확하게 표기하기 위해 iterator를 다 표기해주었다.
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
using namespace std;
int main() {
int N;
cin >> N;
map<string, int> m;
while(N-->0) {
string s;
cin >> s;
m[s]++;
}
int max_res=0;
for (map<string,int>::iterator it = m.begin(); it!=m.end(); it++) {
max_res = max(max_res, it->second);
}
for (map<string,int>::iterator it = m.begin(); it!=m.end(); it++) {
if (max_res == it->second) {
cout << it->first << '\n';
return 0;
}
}
return 0;
}
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] #1991 트리 순회 (0) | 2024.01.05 |
---|---|
[BOJ] #11723 집합 (0) | 2024.01.04 |
[BOJ] #2346 풍선 터뜨리기 (0) | 2023.11.02 |
[BOJ] #11866 요세푸스 문제0 (0) | 2023.11.02 |
[BOJ] #1269 대칭 차집합 (0) | 2023.10.30 |