c c++ 언어 공부

백준 1302번 : 베스트셀러 (C 언어)

Code C 2023. 8. 23. 11:11

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

 

1302번: 베스트셀러

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

www.acmicpc.net

Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
typedef struct {
    char name[51];
    int count;
} arr;
 
int main() {
    int n;
    scanf("%d"&n);
    char na[51];
    arr a[1001];
    int num = 0;
 
    for (int i = 0; i < n; i++) {
        scanf("%s", na);
        int found = 0;
 
        for (int j = 0; j < num; j++) {
            if (strcmp(na, a[j].name) == 0) {
                a[j].count++;
                found = 1;
                break;
            }
        }
 
        if (!found) {
            strcpy(a[num].name, na);
            a[num].count = 1;
            num++;
        }
    }
 
    int maxCount = 0;
    char bestBook[51];
 
    for (int i = 0; i < num; i++) {
        if (a[i].count > maxCount || (a[i].count == maxCount && strcmp(a[i].name, bestBook) < 0)) {
            maxCount = a[i].count;
            strcpy(bestBook, a[i].name);
        }
    }
 
    printf("%s\n", bestBook);
 
    return 0;
}
cs

문제 설명: 김형택은 탑문고의 직원으로, 오늘 팔린 책 중에서 가장 많이 팔린 책의 제목을 찾아야 합니다. 입력으로는 오늘 팔린 책의 개수(N)와 각 책의 제목이 주어집니다. 책의 제목은 최대 50자의 알파벳 소문자로 이루어져 있습니다. 가장 많이 팔린 책이 여러 개일 경우, 사전 순으로 가장 앞선 책의 제목을 출력해야 합니다.

코드 설명:

  1. 구조체 arr 정의: 구조체 arr는 책의 제목과 해당 책의 판매 개수를 저장합니다.
  2. 메인 함수:
    • 입력을 받고 배열과 변수를 초기화합니다.
    • 입력된 책의 제목을 배열 a에 저장하고, 이미 저장된 책이라면 판매 개수를 증가시키고, 처음 나온 책이라면 배열에 추가합니다.
  3. 가장 많이 팔린 책 찾기:
    • maxCount와 bestBook 변수를 사용하여 가장 많이 팔린 책의 정보를 추적합니다.
    • 반복문을 통해 배열 a를 순회하면서 판매 개수가 현재까지 최대 개수보다 많거나, 개수가 같으면서 책 제목이 사전 순서로 더 앞에 있을 때 최대 값을 업데이트합니다.
  4. 결과 출력: 가장 많이 팔린 책의 제목인 bestBook을 출력합니다.