Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
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
Archives
Today
Total
관리 메뉴

Life Engineering

[프로그래머스] 오픈채팅방 (C++) 본문

Problem Solving

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

흑개 2021. 8. 30. 20:23

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

 

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

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

programmers.co.kr

#include <string>
#include <vector>
#include <sstream>
#include <map>

using namespace std;

vector<string> split(string input, char delimiter) {
    vector<string> answer;
    stringstream ss(input);
    string temp;
    while (getline(ss, temp, delimiter)) {
        answer.push_back(temp);
    }
    return answer;
}

vector<string> solution(vector<string> record) {
    vector<string> answer;
    map<string, string> m;
    for (int i=0; i<record.size(); i++){
        vector<string> v=split(record[i],' ');
        if (v[0]=="Enter" || v[0]=="Change"){
            m[v[1]]=v[2];
        }
    }
    for (int i=0; i<record.size(); i++){
        vector<string> v=split(record[i],' ');
        if (v[0]=="Enter"){
            answer.push_back(m[v[1]]+"님이 들어왔습니다.");
        }
        else if (v[0]=="Leave"){
            answer.push_back(m[v[1]]+"님이 나갔습니다.");
        }
    }
    return answer;
}

string+map 을 다루는 문제.

 

c++은 문자열을 split 하는 함수가 없어서 stringstream 으로 직접 구현해줘야 한다.

 

다른 분들의 풀이를 보니까 

이런 식으로 ss에 split할 문자열을 넣어주고, split된 문자열 조각을 미리미리 이렇게 받을 수 있었다. 이 점을 사용할 것.

stringstream ss(input);
ss>>command;
ss>>uid;
if(command=="Enter" || command=="Change")
{
  ss>>ID;
  m[uid]=ID;
}

<출처: 프로그래머스  soooong , 김종옥 , 이태형 님>