알고리즘/PS - 프로그래머스

[프로그래머스 - C++] 오픈채팅방

excited-hyun 2021. 7. 9. 15:37
반응형

https://programmers.co.kr/learn/courses/30/lessons/42888

 

코딩테스트 연습 - 오픈채팅방

오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오

programmers.co.kr

 

풀이

 

ID를 key로, 닉네임을 value로 하여 Map을 사용하여 문제를 해결한다.

map<string, string> m1 를 생성하여 사용하였다.

 

이 문제의 풀이를 위해서 record를 두 번 읽는다. (한 번 읽어서 가능한 방법은 내 머리론 모르겠당ㅠ)

  1. Enter 또는 Change의 command의 경우에 ID와 닉네임 map의 값을 수정해 주기 위해
  2. ID와 최종 닉네임을 매칭해서 answer 벡터를 생성하기 위해
#include <string>
#include <vector>
#include <map>
#include <cstdio>

using namespace std;

vector<string> solution(vector<string> record) {
    vector<string> answer;
    map<string, string> m1;
    char cmd[10];
    char id[11];
    char name[11];
    for(int i=0; i<record.size(); i++){
        if (record[i][0] == 'E'){
            sscanf(record[i].c_str(), "%s %s %s", cmd, id, name);
            m1[id] = name;
        }
        else if (record[i][0] == 'C'){
            sscanf(record[i].c_str(), "%s %s %s", cmd, id, name);
            m1[id] = name;
        }
        else if (record[i][0] == 'L'){
            sscanf(record[i].c_str(), "%s %s", cmd, id);
        }
        
    }
    
    for(int i=0; i<record.size(); i++){
        if (record[i][0] == 'E'){
            sscanf(record[i].c_str(), "%s %s %s", cmd, id, name);
            answer.push_back(m1[id]+"님이 들어왔습니다.");
        }
        
        else if (record[i][0] == 'L'){
            sscanf(record[i].c_str(), "%s %s", cmd, id);
            answer.push_back(m1[id]+"님이 나갔습니다.");
        }
        
    }
   
    return answer;
}
728x90
반응형