본문 바로가기

프로그래머스 풀이/Lv 2

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

728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

카카오 2019년 기출문제로 코딩테스트에서 자주 출제되는 맵을 적절히 사용해야하는 문제이다. 

Insert가 들어오면 맵에 만약 유저 아이디가 존재하면 갱신하고 없으면 추가한다.

체인지가 들어오면 맵 유저 아이디 key에서 닉네임을 교체한다.

 

그리고 insert와 leave가 들어오면 순서 벡터에 유저 아이디와 나가고 들어감을 표시해둔다.

그리고 이후 순서 벡터대로 결과를 출력하면 된다.

 

그렇게 어렵진 않지만 한번에 제출해서 맞춘 것이 좋다. 한번에 맞춰야 코딩테스트에서도 한번에 맞출 수 있다,

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

map<string, string> userInfo;
vector<pair<string, string>> order;

vector<string> split(string str){
    vector<string> res;
    string tmp = "";
    for(int i = 0; i < str.size(); i++){
        if(str[i] == ' '){
            res.push_back(tmp);
            tmp = "";
        }else
            tmp += str[i];
    }
    
    res.push_back(tmp);
    
    return res;
}

vector<string> solution(vector<string> record) {
    vector<string> answer;
    
    vector<vector<string>> processRecord;
    for(int i = 0; i < record.size(); i++){
        processRecord.push_back(split(record[i]));
    }
    
    for(auto records : processRecord){
        if(records[0] == "Enter"){
            if(userInfo.find(records[1]) == userInfo.end()){ // 못찾음
                userInfo.insert({records[1], records[2]});
                order.push_back({records[0], records[1]});
            }else{ // 찾음
                userInfo[records[1]] = records[2];
                order.push_back({records[0], records[1]});
            }
        }else if(records[0] == "Leave"){
            order.push_back({records[0], records[1]});
        }else{
            userInfo[records[1]] = records[2];
        }
    }
    
    for(pair<string, string> info : order){
        if(info.first == "Enter"){
            answer.push_back(userInfo[info.second] + "님이 들어왔습니다.");
        }else{
            answer.push_back(userInfo[info.second] + "님이 나갔습니다.");
        }
    }
    
    return answer;
}

 

흠,, 좀 느리네