백준 7785 - 회사에 있는 사람
문제링크
문제 접근
- 자료구조로 map 을 선택하여 데이터 관리와 정렬을 한번에 수행할 수 있도록 했다.
- “enter”를 입력받으면 상태는 true, “leave”를 입력받으면 상태는 false 로 정의하여 입력이 끝난 후 true 인 사람만 사전 역순으로 출력한다.
의사코드(pseudo-code)
- cin >> n
- map<string, bool, greater> list // key(string)을 기준으로 내림차순으로 정렬
- for i=0 to n-1:
- cin >> name >> state
- if state=="enter":
- list[name] = true
- else:
- list[name] = false
- for iter to list.end()
- if iter.second is true:
- cout << iter.first
소스코드 및 분석
전체 코드
#include <iostream>
#include <string>
#include <map>
int main()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
int n;
std::cin >> n;
std::map<std::string, bool, std::greater<std::string>> list;
for (int i = 0; i < n; i++) {
std::string name, state;
std::cin >> name >> state;
if (state == "enter") list[name] = true;
else list[name] = false;
}
for (auto iter : list) {
if (iter.second)
std::cout << iter.first << "\n";
}
}
- std::ios_base::sync_with_stdio(false), std::cin.tie(NULL) 구문을 이용해서 string 타입의 문자열을 입력받는 시간을 줄여 시간초과에 걸리지 않도록 했다.
- map 의 자료형은 key(first) 와 value(second) 의 관계로 반복자(iter)를 이용하여 pair 객체처럼 접근할 수 있다.
- 범위기반 for 반복문을 활용했다.
Leave a comment