-
11650번 백준 - 좌표 정렬하기
문제 링크: https://www.acmicpc.net/problem/1302
1302번: 베스트셀러
첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고
www.acmicpc.net
문제:
김형택은 탑문고의 직원이다. 김형택은 계산대에서 계산을 하는 직원이다. 김형택은 그날 근무가 끝난 후에, 오늘 판매한 책의 제목을 보면서 가장 많이 팔린 책의 제목을 칠판에 써놓는 일도 같이 하고 있다.
오늘 하루 동안 팔린 책의 제목이 입력으로 들어왔을 때, 가장 많이 팔린 책의 제목을 출력하는 프로그램을 작성하시오.
접근 방법:
key: 책 이름, value: 책 이름의 빈도수를 갖는 map 변수를 만들어준다. 이 문제를 풀면서 map 공부를 하게 되었는데 map 자료구조는 자료를 저장할 때 key 값을 기준으로 오름차순으로 정렬된다고 한다. 그렇기 때문에 이 문제에서는 빈도수가 가장 높은 값을 찾은 후 해당 빈도수를 갖는 key 값을 출력해주면 된다.
Map에 대한 추가 설명:
1. Map이란?
map은 key와 value 쌍으로 이루어져있다. 중요 특징으로는 중복을 허용하지 않는다는 점이 있다.
2. 기본 형태
map <key type, value type> 이름;
ex) map <string, int> m;
3. map 정렬
위에서 언급하였던 것처럼 map은 자료를 저장할 때 내부에서 key를 기준으로 오름차순으로 자동 정렬한다.
내림차순으로 정렬하고 싶은 경우에는 map <int, int, greater> m; 과 같이 사용하면 된다.
구체적인 사용 방법은 따로 정리하여 포스팅할 예정!
코드:
#include <iostream> #include <vector> #include <algorithm> #include <map> using namespace std; // 책 이름을 key, 책 이름이 나온 빈도 수를 vlaue로 갖는 map 변수를 만듦 // map 자료구조는 자료를 저장할 때 key 값ㅇㄹ 기준으로 오름차순으로 정렬되므로 가장 빈도수가 높은 값을 찾으면 바로 key 값을 출력하고 프로그램을 종료하면 됨 map<string, int> m; int n, cnt; int main() { cin >> n; while (n--) { string book; cin >> book; m[book]++; } //range-based for statement // for (element_declaration : array) statement; for (auto p : m) cnt = max(cnt, p.second); for (auto p : m) { if (p.second == cnt) { cout << p.first; return 0; } } }
'코딩' 카테고리의 다른 글
[BaekJoon/C++] 13975번 파일 합치기 3 (0) 2023.10.27 [BaekJoon/C++] 1181번 단어 정렬 (1) 2023.10.23 [BaekJoon/C++] 11650번 좌표 정렬하기 (1) 2023.10.17 [BaekJoon/C++] 2609번 최대공약수와 최소공배수 (3) 2023.10.17 [BaekJoon/C++] 10814번 나이순 정렬 (0) 2023.10.14 댓글