[C++] 백준 1302 베스트셀러
반응형
1. 서론
어렵지 않다. 문제를 자세히 읽고 집중력이 흐트러지지 않은 상태라면.
2. 문제풀이
하루에 팔린 책의 수가 입력된다. 그리고 그 수만큼 책의 제목이 입력된다. 입력을 받고 하루에 가장 많이 팔린 책의 제목을 출력하는 게 문제이다. 여기서 주의할 점은 가장 많이 팔린 책의 개수가 같은 경우에는 사전 순으로 앞인 책의 제목을 출력해야 한다.
나 같은 경우에는 일단 처음에 사전 순을 못 봐서 헤맸고, 그다음에는 index값을 책의 개수를 count 한 값으로 넣어서 뭐가 오류가 나서 틀린 지를 모르고 한참을 헤맸다. (바보 같음)
pair로 문자열과 책의 개수를 만들었다. 책 하나가 처음에 입력될 때 책의 개수를 1로 해서 같이 넣고 다음 문자열이 또 들어올 때 원래 벡터에 책이 있는지 없는지 검사 후 없으면 넣고, 있으면 책의 개수를 +1 하는 식으로 만들었다.
그렇게 벡터가 완성되면 책의 개수를 검사 후 가장 큰 값을 고르는데 이때 사전 순으로 가장 앞에 있는 것이 오게 해 준다.
3. 코드 설명
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int main()
{
string s;
vector<pair<string,int> > v;
int n, i, j, f = 0, m = 0, x = 0;
cin >> n;
for (i = 0; i < n; i++)
{
cin >> s;
for (j = 0; j < v.size(); j++)
{
if (v[j].first == s)
{
f = 1;
v[j].second++;
break;
}
}
if (f != 1)
v.push_back(make_pair(s, 1));
f = 0;
}
for (i = 0; i < v.size(); i++)
{
if (m < v[i].second || (m == v[i].second && v[x].first > v[i].first))
{
m = v[i].second;
x = i;
}
}
cout << v[x].first << endl;
}
문자열을 입력받는다. 그리고 벡터에 그 문자열이 있는지 없는지 확인 후 있으면 f = 1로 바꾸고 책의 개수를 +1 해준다.
f값은 책의 제목을 추가할지, 말지 정하기 위해 쓰인다. 그러기 위해서 반복문이 한 번 끝날 때마다 f를 0으로 초기화해준다.
책의 입력이 끝난 후 가장 많은 책을 찾는다. 이때 책의 개수가 같은 경우 사전 순으로 앞쪽인지 판별하기 위해 조건을 걸어준다.
반응형
'Algorithm' 카테고리의 다른 글
[C++] 백준 1668 트로피 진열 (0) | 2021.03.27 |
---|---|
[C++] 백준 1568 새 (0) | 2021.03.27 |
[C++] 백준 1543 문서 검색 (0) | 2021.03.26 |
[C++] 백준 11004 K번째 수 (0) | 2021.03.26 |
[C++] 백준 2003 수들의 합 2 (0) | 2021.03.10 |