회사에 있는 사람

문제 링크: https://www.acmicpc.net/problem/7785

 

7785번: 회사에 있는 사람

첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는

www.acmicpc.net

 

이름이 같을 경우는 없다고 하였으니 key값은 고유하다.
따라서, enter일 때 insert, leave 일 때 erase를 수행하고,
사전 역순이므로 정렬된 역순으로 출력한다.

 

그리고 출력 시에 endl으로 출력을 하면 시간 초과가 뜬다.
이유는 출력 함수의 끝을 알림으로 버퍼를 정리하는 기능을 하기 때문에 시간이 더 걸린다는 것이다.
따라서, 이 점에 유의하여 \n으로 구분한다.

 

  • 정답 코드

      #include<iostream>
      #include<set>
    
      using namespace std;
    
      int main() {
          ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    
          set<string> memberlist;
          int n;
          cin >> n;
    
          while (n--) {
              string name, stat;
              cin >> name >> stat;
              if (stat == "enter") memberlist.insert(name);
              else if (stat == "leave") memberlist.erase(name);
          }
    
          if(!memberlist.empty())
              for (set<string>::reverse_iterator iter = memberlist.rbegin(); iter != memberlist.rend(); ++iter)
                  cout << *iter << "\n";
    
          return 0;
      }

'ProblemSolving' 카테고리의 다른 글

[BOJ] 1276_교각 놓기  (0) 2021.02.07
[BOJ] 10546_배부른 마라토너  (0) 2021.02.06
[BOJ] 5397_키로커  (0) 2021.02.04
[BOJ] 3085_사탕게임  (4) 2021.02.03
[BOJ] 1074_Z  (0) 2021.02.02
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기