티스토리 뷰

www.acmicpc.net/problem/1302

 

1302번: 베스트셀러

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

www.acmicpc.net

 

당일 팔린 책 중 가장 많이 팔린 책의 이름을 출력한다.(같은 값이 있을 경우 사전순 가장 앞의 값을 출력)

 

#include<iostream>
#include<vector>
#include<map>

using namespace std;

string dicCompare(string first, string second) {
	if (first > second) return first;
	else return second;
}

string solution(vector<string> &bookName) {
	map<string, int> frequency;
	for (int i = 0; i < bookName.size(); i++) {
		if (frequency.find(bookName[i]) != frequency.end()) {
			int t = frequency.find(bookName[i])->second;
			frequency.find(bookName[i])->second = t + 1;
		}
		else {
			frequency.insert(pair<string, int>(bookName[i], 1));
		}
	}
	int many = 0;
	string answer;
	for (map<string, int>::iterator it = frequency.begin(); it != frequency.end(); it++) {
		if (it->second > many) {
			answer = it->first;
			many = it->second;
		}
		else if (it->second == many && dicCompare(answer, it->first) == answer) {
			answer = it->first;
			many = it->second;
		}
	}
	bookName.clear();

	return answer;
}

int main() {
	int bookCnt = 0;
	string tmp;
	vector<string> bookName;

	cin >> bookCnt;
	for (int i = 0; i < bookCnt; i++) {
		cin >> tmp;
		bookName.push_back(tmp);
		tmp.clear();
	}

	cout << solution(bookName);

	return 0;
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
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
글 보관함