본문 바로가기

PS/프로그래머스

[프로그래머스 LV 2 ] 오픈채팅방 C++/python

728x90

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

 

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

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

programmers.co.kr

 

c++로 sstream을 다뤄본 좋은 문제

문자열에대해 좀 나가보자

파이썬은 딕셔너리가 c++의 맵 처럼 갱신기능이 있다는걸알게됨

 

C++

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
#include <string>
#include <vector>
#include <sstream>
#include <unordered_map>
 
using namespace std;
 
vector<string> solution(vector<string> record) {
    vector<string> answer;
    stringstream ss;
    unordered_map <stringstring> id_name;
    string e_l; string id; string name;
    vector<string> uid;
    for (int i = 0; i < record.size(); i++) {
        ss.str(record[i]);
        ss >> e_l;
        if (e_l == "Enter") {
            ss >> id;
            ss >> name;
            answer.push_back("님이 들어왔습니다.");
            id_name[id] = { name };
            uid.push_back(id);
        }
        else if (e_l == "Leave") {
            ss >> id;
            ss >> name;
            answer.push_back("님이 나갔습니다.");
            uid.push_back(id);
        }
        else {
            ss >> id;
            ss >> name;
            id_name[id] = { name };
        }
        ss.clear();
    }
 
    for (int i = 0; i < answer.size(); i++) {
        answer[i] = id_name[uid[i]] + answer[i];
    }
 
    return answer;
}
cs

 

 

파이썬코드

c++에 있는 맵 대신 딕셔너리를 사용함

딕셔너리는 키가 중복되더라도 뒤에것을 쓰기때문에 갱신 기능이있음

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def solution(record):
    answer = []
    uid = []
    dic = {}
 
    for i in record:
        if i.split(" ")[0== "Enter":
            answer.append("님이 들어왔습니다.")
            dic[i.split(' ')[1]] = i.split(' ')[2]
            uid.append(i.split(' ')[1])
        elif i.split(' ')[0== 'Leave':
            answer.append("님이 나갔습니다.")
            uid.append(i.split(' ')[1])
 
        else:
            dic[i.split(' ')[1]] = i.split(' ')[2]
 
    for i in range(len(answer)):
        answer[i]=dic[uid[i]]+answer[i]
    
    return answer
cs
728x90