본문 바로가기
백준 코딩테스트/실버

1302) 베스트셀러 (C++)

by xortl98 2022. 4. 15.
728x90

 출처 

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

 

1302번: 베스트셀러

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

www.acmicpc.net

 

 

 내 풀이 

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int N = 0;
string book = "";
vector<string> books;

int main()
{

	cin >> N;

	for (int i = 0; i < N; i++)
	{
		cin >> book;
		books.push_back(book);
	}

	sort(books.begin(), books.end());

	//체크 
	/*for (int i = 0; i < books.size(); i++)
	{
		cout << books[i] << endl;
	}*/

	int bestsell = 0;
	int cnt_sell = 1;
	string cnt_book = books[0];
	string bestseller = books[0];

	for (int i = 1; i < books.size(); i++)
	{
		if (cnt_book == books[i])	cnt_sell++;

		else
		{
        	//가장 처음 책을 일단 베스트셀러로 선정 
			if (bestsell == 0)
			{				
				bestsell = cnt_sell;
			}
			else if (cnt_sell > bestsell)
			{
				bestsell = cnt_sell;
				bestseller = books[i-1];	//책이 바뀌고 이전의 책이 베스트 셀러니까 books[i-1]
				
			}
			//책이 바뀌었으니 초기화 
			cnt_sell = 1;
			cnt_book = books[i];
		}
	}

	//맨 마지막 책이 베스트 셀러인 경우 마지막으로 비교해줌 
	if (cnt_sell > bestsell) cout << books[books.size() - 1];
	else cout << bestseller;
}

 

 해설

벡터안에 입력받은 책을 넣고 정렬 후 그대로 책의 갯수를 세서 가장 많이 팔린 책을 출력해주는 식으로 만들었다.

 

 

 

 피드백

조금 더 효율적으로 코드를 짤 수 있을 것 같은데 아직 많이 부족한거 같다. 

계속 문제 많이 풀어보기