728x90
https://www.acmicpc.net/problem/1302
1302번: 베스트셀러
첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고
www.acmicpc.net
#include <stdio.h> // 베스트셀러
#include <string.h>
#include <stdlib.h>
typedef struct
{
char name[51];
int cnt;
}book;
int compare(void* a, void* b)
{
if (strcmp(a, b) > 0)
return 1;
else
return -1;
}
int main()
{
int n;
scanf("%d", &n);
book b[1000];
char str[51];
int total = 0;
for (int i = 0; i < n; i++)
{
scanf("%s", str);
b[i].cnt = 0;
if (i == 0)
{
strcpy(b[i].name, str);
total++;
}
else
{
// 같은 단어가 존재하면 해당 cnt 증가
int j = 0, flag = 0;
while (j < i)
{
if (strcmp(str, b[j].name) == 0)
{
flag = 1;
b[j].cnt++;
break;
}
j++;
}
// 처음 나온 단어의 경우 새로 추가
if (flag == 0)
{
strcpy(b[i].name, str);
total++;
}
}
}
// 문자열 정렬(개수가 같을 때의 경우 대비)
qsort(b, total, sizeof(b[0]), compare);
// 가장 많이 나온 단어 찾기
int idx, ans = 0, max = -1;
for (idx = 0; idx < total; idx++)
{
if (b[idx].cnt > max)
{
max = b[idx].cnt;
ans = idx;
}
}
printf("%s", b[ans].name);
return 0;
}
MEMO
-- 구조체 배열을 통해서 단어를 담을 공간과 카운트를 해줄 변수 생성
-- 단어를 입력 받으며 이미 저장한 단어의 경우 해당 단어가 위치한 구조체에서 cnt 증가
-- 처음 입력 받은 경우에는 새로운 구조체배열에 이름 추가
-- 책 이름들을 퀵정렬로 오름차순으로 정렬 후 최대 cnt 값 찾기(가장 많이 저장된 책)
!! c++에서는 쉽게 해결가능한 문제 !!
728x90
728x90
'백준[baekjoon] > C언어' 카테고리의 다른 글
백준(baekjoon) [C] - 2504번: 괄호의 값 (0) | 2023.02.01 |
---|---|
백준(baekjoon) [C] - 1012번: 유기농 배추 (0) | 2023.02.01 |
백준(baekjoon) [C] - 5430번: AC (0) | 2023.01.31 |
백준(baekjoon) [C] - 1715번: 카드 정렬하기 (0) | 2023.01.30 |
백준(baekjoon) [C] - 11286번: 절댓값 힙 (0) | 2023.01.30 |