상세 컨텐츠

본문 제목

< 백준 BaekJoon : 7785번 회사에 있는사람> C++

C++/Baekjoon

by J2on 2023. 8. 4. 22:47

본문

문제

https://www.acmicpc.net/problem/7785

 

7785번: 회사에 있는 사람

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

www.acmicpc.net

 

풀이

 

문제 자체는 그렇게 어려운 문제가 아니죠. 저는 STL 사용에 익숙해져 보려고 map을 이용해서 풀어봤습니다.

#include <iostream>
#include <string>
#include <map>
using namespace std;

int main(){
    map<string, bool, greater<string>> employeeMap;
    string name, status;
    bool isAttendence;

    int num;   
    cin >> num;
  
    for(int i=0; i<num; i++){
        cin >> name >> status;
        if(status == "enter"){
            isAttendence = true;
        }
        else{
            isAttendence = false;
        }
        
        if(employeeMap.find(name) == employeeMap.end()){
            employeeMap.insert({name, isAttendence});
        }
        else{
            employeeMap.find(name)->second = isAttendence;
        }
    }

    for(auto m : employeeMap){
        if(m.second){
            cout << m.first << '\n';
        }
    }    
    
}

map을 이용해 <string, bool> 형태로 작성해 보았는데, 확실히 이런 문제에서는 과한 감이 있네요.

 

vector를 활용하면 다음과 같이 풀 수 있습니다. 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(){
  string name, status;

  int num;   
  cin >> num;

  vector<string> employees;
  for(int i=0; i<num; i++){
    cin >> name >> status;
    employees.push_back(name);
  }
  
  sort(employees.rbegin(), employees.rend());
  for(int i=0; i<employees.size(); i++){
    if(employees[i] == employees[i+1]){
      i++;
    }
    else{
      cout << employees[i] << '\n';
    }
  }  
}

이름만 vector에 넣고 역순정렬한 후에

 

대충 옆에 있는 애랑 같으면 이름이 두번 나왔다는 거니 퇴근했다는거겠죠.

 

이 문제에서 전날 출근해서 지금 퇴근하는 사람은 없을테니까. 

 

그런식으로 해결할 수 있습니다. 

 

 

 

 

 

 

+ 그리고 오랜만에 백준 푸느라 까먹었던건데,,, endl 보다 \n을 쓰는게 시간 단축에 큰 힘이 됩니다.

 

이거 까먹고 있다가 괜히 문제 한 번 더 풀었음..

https://github.com/J2on/StudyAlgorithm_Part2/tree/main/%EB%B0%B1%EC%A4%80/Silver/7785.%E2%80%85%ED%9A%8C%EC%82%AC%EC%97%90%E2%80%85%EC%9E%88%EB%8A%94%E2%80%85%EC%82%AC%EB%9E%8C

관련글 더보기

댓글 영역