자기개발👨‍💻/코딩 알고리즘

[C++] 백준 1302 베스트셀러 // <map>

천숭이 2022. 3. 16. 18:34

https://www.acmicpc.net/problem/1302

 

1302번: 베스트셀러

첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고

www.acmicpc.net

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

int n, max_=0;
map<string, int> m;
map<string, int>::iterator iter;
string str;

int main(){
	cin>>n;
	for(int i=0 ; i<n;i++){
		cin >> str;
		m[str]++;  // 딕셔너리 형태로 업카운트 
	} 
	
//	for (iter=m.begin(); iter!=m.end(); iter++){
//		cout<< iter->first <<" "<< iter->second << endl;
//	}
	
	for (iter=m.begin(); iter!=m.end();iter++){
		max_ = max(max_, iter->second);
	}
	
	for(iter=m.begin(); iter!= m.end(); iter++){
		if (iter->second == max_){
			cout<<iter->first;
			break;
		}
	}

}

- 파이썬의 딕셔너리 형태와 유사한 map 자료구조를 사용

- 입력이 들어올때마다 해당 키값에 해당하는 second를 카운트업

- 다시 반복문으로 가장 큰 second값을 찾고

- 또 다시 반복문으로 그 second값에 해당하는 first값을 출력한 후 break로 프로그램 종료