From e2d05c1e8fb6f480235dd1d3ce0884cc68fabbac Mon Sep 17 00:00:00 2001 From: Suhyeon Jo <63843822+ffvv0123@users.noreply.github.com> Date: Wed, 6 Nov 2024 22:26:33 +0900 Subject: [PATCH] =?UTF-8?q?[Silver=20I]=20Title:=20=EC=A1=B8=EC=97=85=20?= =?UTF-8?q?=EC=82=AC=EC=A7=84,=20Time:=20292=20ms,=20Memory:=2039928=20KB?= =?UTF-8?q?=20-BaekjoonHub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.md" | 56 ++++++++++++++ ...05\342\200\205\354\202\254\354\247\204.cc" | 75 +++++++++++++++++++ 2 files changed, 131 insertions(+) create mode 100644 "\353\260\261\354\244\200/Silver/23349.\342\200\205\354\241\270\354\227\205\342\200\205\354\202\254\354\247\204/README.md" create mode 100644 "\353\260\261\354\244\200/Silver/23349.\342\200\205\354\241\270\354\227\205\342\200\205\354\202\254\354\247\204/\354\241\270\354\227\205\342\200\205\354\202\254\354\247\204.cc" diff --git "a/\353\260\261\354\244\200/Silver/23349.\342\200\205\354\241\270\354\227\205\342\200\205\354\202\254\354\247\204/README.md" "b/\353\260\261\354\244\200/Silver/23349.\342\200\205\354\241\270\354\227\205\342\200\205\354\202\254\354\247\204/README.md" new file mode 100644 index 0000000..bcf4691 --- /dev/null +++ "b/\353\260\261\354\244\200/Silver/23349.\342\200\205\354\241\270\354\227\205\342\200\205\354\202\254\354\247\204/README.md" @@ -0,0 +1,56 @@ +# [Silver I] 졸업 사진 - 23349 + +[문제 링크](https://www.acmicpc.net/problem/23349) + +### 성능 요약 + +메모리: 39928 KB, 시간: 292 ms + +### 분류 + +자료 구조, 해시를 사용한 집합과 맵, 구현, 정렬, 문자열, 트리를 사용한 집합과 맵 + +### 제출 일자 + +2024년 11월 6일 22:26:12 + +### 문제 설명 + +

한국항공대학교에는 올해 새로 들어온 큰 비행기가 있다.

+ +

+ +

항공대학교 본관 옆 A300 모형

+ +

올해 졸업식에 참가하는 모든 사람은 비행기가 보이게 사진을 찍고싶어하지만, 졸업식은 하루뿐이라 모든 사람이 원하는 장소와 시간에 촬영할 수 없다.

+ +

따라서 학교에서는 최대한 많은 사람이 촬영할 수 있도록 미리 졸업식 전날 원하는 장소와 시간대를 제출받아 예상되는 혼잡 장소와 시간대를 공지하기로 하였다.

+ +

제출은 다음과 같은 값을 가진다.

+ + + +

제출된 장소와 시간대의 목록을 이용해 학교가 혼잡 장소와 시간대를 공지하는 방법은 다음과 같다.

+ +
    +
  1. 가장 많은 사람이 제출한 (장소, 시간대) 쌍을 선택한다.
  2. +
  3. 만약 1번에 해당하는 구간이 여러 개라면, 사전 순으로 가장 앞에 오는 장소를 선택한다. 사전 순의 기준은 아스키 코드 순이다. 예를 들어 구간 배열 ['ab', 'a', 'aa', ba']를 정렬한 배열은 ['a', 'aa', 'ab', 'ba']가 된다.
  4. +
  5. 만약 2번에서 고른 장소에 가장 많이 제출된 시간대가 여러 개라면, 가장 빠른 시간대를 고른다.
  6. +
+ +### 입력 + +

첫째 줄에 제출 수 N이 주어진다. (1 N 100)

+ +

다음 N개의 줄에 제출의 정보 name, place, time 가 한 줄에 하나씩 주어진다. 이때 빈 문자열은 입력으로 주어지지 않는다.

+ +

입력에서 주어지는 장소(place)의 종류는 최대 10가지이다.

+ +### 출력 + +

첫째 줄에 학교가 공지할 것으로 예상되는 혼잡 (장소, 시간대) 쌍을 공백으로 구분하여 출력한다. 이때 시간대는 조건을 만족하는 가장 긴 시간대를 의미한다.

+ diff --git "a/\353\260\261\354\244\200/Silver/23349.\342\200\205\354\241\270\354\227\205\342\200\205\354\202\254\354\247\204/\354\241\270\354\227\205\342\200\205\354\202\254\354\247\204.cc" "b/\353\260\261\354\244\200/Silver/23349.\342\200\205\354\241\270\354\227\205\342\200\205\354\202\254\354\247\204/\354\241\270\354\227\205\342\200\205\354\202\254\354\247\204.cc" new file mode 100644 index 0000000..808e486 --- /dev/null +++ "b/\353\260\261\354\244\200/Silver/23349.\342\200\205\354\241\270\354\227\205\342\200\205\354\202\254\354\247\204/\354\241\270\354\227\205\342\200\205\354\202\254\354\247\204.cc" @@ -0,0 +1,75 @@ +/** + * 이름 / 장소 / 시간 + * -> 가장 많은 사람이 제출한 (장소, 시간대) 쌍 선택 + * -> 위 조건이 여러개 -> 사전순으로 가장 앞 + * -> 위 조건이 또 여러개면 가장 빠른 시간대 + * + * 가장 혼잡한 (장소, 시간대) 출력 + */ + +#include +#include +#include +#include +#include +using namespace std; + +int N, start_time, end_time; +string name, place; + +bool compare(pair p1, pair p2) { + if (p1.first == p2.first) { + return p1.second < p2.second; + } + else return p1.first < p2.first; +} + +int main() { + ios::sync_with_stdio(false); + cin.tie(0); + + set name_set; + map, int> m; + + cin >> N; + for (int i = 0; i < N; i++) { + cin >> name >> place >> start_time >> end_time; + + if (name_set.find(name) != name_set.end()) { + continue; + } + + name_set.insert(name); + + for (int t = start_time; t < end_time; t++) { + m[{place, t}]++; + } + } + + int max_answer = 0; + + for (auto iter = m.begin(); iter != m.end(); iter++) { + if (iter->second > max_answer) max_answer = iter->second; + } + + vector> v; + for (auto iter = m.begin(); iter != m.end(); iter++) { + if (iter->second == max_answer) { + v.push_back({ iter->first.first, iter->first.second }); + } + } + + sort(v.begin(), v.end(), compare); + + + int last = v.begin()->second; + for (auto iter = v.begin() + 1; iter != v.end(); iter++) { + if (iter->first == v.begin()->first && iter->second == last + 1) { + last = iter->second; + } + } + + cout << v.begin()->first << ' ' << v.begin()->second << ' ' << last + 1; + + return 0; +} \ No newline at end of file