알고리즘 문제/[프로그래머스]

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

latter2005 2021. 3. 19. 23:37

2019 카카오 채용 코딩 테스트 문제입니다.

 

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

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

programmers.co.kr

문제 확인

 

스트링, 쿼리 처리 문제입니다.

 

풀이

 

Enter, Leave만 쿼리 (행동 : 아이디)로 저장한 다음 Enter, Change에 대하여 map 컨테이너에 (아이디 : 닉네임) 저장하고 관리합니다.

모든 레코드가 처리되면 쿼리를 읽으면서 처리합니다.

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <string>
#include <vector>
#include <map>
 
using namespace std;
typedef struct query {
    char op;
    string id;
    query(char op, string &id) :op(op), id(id) {};
}query;
 
vector<string> solution(vector<string> record) {
    int n = record.size();
    vector<string> answer;
 
    vector<query> qry;//쿼리 행동, 아이디
 
    map<stringstring> user;//유저 아이디, 닉네임
 
    for (auto &s : record) {//레코드 처리
        vector<string> t{};
        for (int i = 0, prev = 0; i < s.size();) {
            while (i < s.size() && s[i] != ' ')++i;
            t.push_back(s.substr(prev, i - prev));
            prev = ++i;
        }
 
        if (t[0][0== 'E') {//enter : 유저 추가, 쿼리 추가
            qry.emplace_back(0, t[1]);
            user[t[1]] = t[2];
        }
        else if (t[0][0== 'C') {//change : 유저의 닉네임 변경
            user[t[1]] = t[2];
        }
        else {//leave : 쿼리 
            qry.emplace_back(1, t[1]);
        }
    }
 
    for (auto &q : qry) {//쿼리 처리
        if (q.op) {
            answer.push_back(user[q.id] + "님이 나갔습니다.");
        }
        else {
            answer.push_back(user[q.id] + "님이 들어왔습니다.");
        }
    }
 
    return answer;
}
 
cs

정확성 테스트

테스트 1 통과 (0.03ms, 3.94MB)
테스트 2 통과 (0.03ms, 3.94MB)
테스트 3 통과 (0.05ms, 3.93MB)
테스트 4 통과 (0.06ms, 3.95MB)
테스트 5 통과 (0.59ms, 3.97MB)
테스트 6 통과 (0.68ms, 3.93MB)
테스트 7 통과 (0.54ms, 3.83MB)
테스트 8 통과 (0.70ms, 3.93MB)
테스트 9 통과 (1.06ms, 3.94MB)
테스트 10 통과 (0.73ms, 3.92MB)
테스트 11 통과 (0.51ms, 3.95MB)
테스트 12 통과 (0.53ms, 3.96MB)
테스트 13 통과 (0.72ms, 3.96MB)
테스트 14 통과 (1.03ms, 4.11MB)
테스트 15 통과 (0.02ms, 3.95MB)
테스트 16 통과 (0.03ms, 3.95MB)
테스트 17 통과 (0.10ms, 3.77MB)
테스트 18 통과 (0.08ms, 3.92MB)
테스트 19 통과 (0.79ms, 3.97MB)
테스트 20 통과 (0.54ms, 3.94MB)
테스트 21 통과 (0.52ms, 3.98MB)
테스트 22 통과 (0.55ms, 3.95MB)
테스트 23 통과 (0.79ms, 3.95MB)
테스트 24 통과 (0.74ms, 3.94MB)
테스트 25 통과 (102.58ms, 41.7MB)
테스트 26 통과 (131.52ms, 40.1MB)
테스트 27 통과 (146.39ms, 41.3MB)
테스트 28 통과 (168.39ms, 46.4MB)
테스트 29 통과 (173.60ms, 46.4MB)
테스트 30 통과 (105.67ms, 39.4MB)
테스트 31 통과 (169.82ms, 44MB)
테스트 32 통과 (116.66ms, 41.6MB)

채점 결과

정확성: 100.0

합계: 100.0 / 100.0

반응형