Computer Science/Algorithm Problem

백준] 1302 - 베스트셀러

TwinParadox 2018. 1. 13. 15:19
728x90

시간 제한 : 2초

메모리 제한 : 128MB




입력

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




출력

첫째 줄에 가장 많이 팔린 책의 제목을 출력한다. 만약 가장 많이 팔린 책이 여러 개일 경우에는 사전 순으로 가장 앞서는 제목을 출력한다.




소스코드

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
struct book
{
	string name;
	int sold;
};
bool compare(const struct book a, const struct book b)
{
	if (a.sold > b.sold)
		return true;
	else if (a.sold == b.sold)
	{
		if (a.name < b.name)
			return true;
		else
			return false;
	}
	else
		return false;
}
int main(void)
{
	bool check = false;
	int n, size = 0;
	vector<struct book> arr;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		string tmp;
		cin >> tmp;
		check = false;
		for (int j = 0; j < size; j++)
			if (arr[j].name == tmp)
				arr[j].sold++, check = true;
		if (!check)
			arr.push_back({ tmp,0 }), size++;
	}
	sort(arr.begin(), arr.end(), compare);
	cout << arr[0].name;
}




Tip

그냥 생각 없이 풀다 보니 구조체로 둘러 싸고 판매량과 책이름에 따라 정렬했다. map을 이용하는 것도 좋은 방법일 것이다.


728x90