- 문제
김형택은 탑문고의 직원이다. 김형택은 계산대에서 계산을 하는 직원이다. 김형택은 그날 근무가 끝난 후에, 오늘 판매한 책의 제목을 보면서 가장 많이 팔린 책의 제목을 칠판에 써놓는 일도 같이 하고 있다.
오늘 하루 동안 팔린 책의 제목이 입력으로 들어왔을 때, 가장 많이 팔린 책의 제목을 출력하는 프로그램을 작성하시오.
//시간 제한: 2초, 메모리: 128MB
- 입력
첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고, 알파벳 소문자로만 이루어져 있다.
- 출력
첫째 줄에 가장 많이 팔린 책의 제목을 출력한다. 만약 가장 많이 팔린 책이 여러 개일 경우에는 사전 순으로 가장 앞서는 제목을 출력한다.
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int n,cnt[1000],k=0;
int big=0;
string title[1000],s;
string ans[1000];
int main(){
cin>>n;
for(int i=0;i<n;i++){
bool t=true;
cin>>s;
for(int j=0;j<n;j++){
if(title[j]==s){
cnt[j]++;
t=false; //이미 팔린적이 있는 책이라면 title배열에 추가없이 카운팅
break;
}
}
if(t) //팔린적이 없는 책이라면 title배열에 추가
title[i]=s;
}
for(int i=0;i<n;i++){ //가장 많이 팔린 책의 갯수를 big에 저장
if(big<cnt[i]){
big=cnt[i];
}
}
for(int i=0;i<n;i++){ //가장 많이 팔린 책들의 제목을 ans배열에 저장
if(cnt[i]==big){
ans[k]=title[i];
k++; //ans에 저장되는 책의 갯수를 위해 k카운팅
}
}
sort(ans,ans+k); //사전 순 가장 앞 제목을 위해 정렬
cout<<ans[0];
return 0;
}
n번 동안 제목 s를 입력 받으며, bool 타입인 t를 통해 이미 나왔던 제목일 때 title index와 같은 cnt index카운팅, 새로 입력받는 제목일 경우에 title 배열에 추가해 주었다.
cnt배열을 돌며 최대 카운팅 횟수를 big에 저장
가장 많이 팔린 책들을 ans배열에 넣고 정렬 후 ans[0] 출력 (사전 순으로 가장 앞서는 제목)