백준 7785 - 회사에 있는 사람

less than 1 minute read

문제링크

문제 접근

  • 자료구조로 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