-
백준 13414 c++알고리즘/백준 2022. 6. 23. 17:58반응형
https://www.acmicpc.net/problem/13414
13414번: 수강신청
입력 데이터는 표준 입력을 사용한다. 입력은 1개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 과목의 수강 가능 인원 K(1 ≤ K ≤ 100,000)와 학생들이 버튼을 클릭한 순서를 기록한 대기목
www.acmicpc.net
입력제한이 K(1 ≤ K ≤ 100,000) , L(1 ≤ L ≤ 500,000) 인것을 봤을때부터 시간복잡도 오류를 발생하게 하려는 문제인걸 짐작했다.
내가 현재 아는 수준으로는 2중 for문을 이용해 이미 등록된 아이디인지 하나씩 검색하는 방법밖에 몰라서 구글링을 한뒤 map 자료형에 대해 알게되었다.
map은 파이썬의 dictionary와 비슷하게 key값과 value값으로 이루어져 있으며 이미 map 안에 저장된 key 값이 있을경우 value 값만 갱신해주는 형태이다
map을 이용해서 이미 저장된 key일 경우 value 값을 가장 나중으로 바꿔주는 식으로 l번만큼 반복문을 실행 한뒤 pair<string,int> 로 된 벡터를 이용해 값을 하나씩 집어 넣어준다.
그 후 두번째 인자를 기준으로 sort 하면 우선 순위가 나오게된다
#include <bits/stdc++.h> #include <unordered_map> using namespace std; bool compare(const pair<string,int>& a, const pair<string,int>& b) { return a.second < b.second; } int main(void) { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n,m; cin >> n >> m; unordered_map<string, int> v; vector<pair<string,int>> lee; for(int i=0; i<m; i++) { string str; cin >> str; v[str] = i; } for(auto &i : v) { lee.push_back(i); } sort(lee.begin(),lee.end(),compare); for(int i=0; i<n; i++) { cout << lee[i].first << endl; } return 0; }
728x90반응형'알고리즘 > 백준' 카테고리의 다른 글
백준 15686 삼성 SW 역량 테스트 기출 문제 c++ (1) 2022.07.04 백준 14889 스타트와 링크 삼성 SW 역량 테스트 기출 c++ (2) 2022.07.01 백준 14888 삼성 SW 역량 테스트 기출문제 c++ (0) 2022.07.01 c++ dfs를 이용한 순열 (0) 2022.06.23 백준 16937 두 스티커 c++ (dfs를 이용한 조합) (0) 2022.06.23