본문 바로가기

개발/알고리즘 & 자료구조

[2020 카카오 블라인드 채용][프로그래머스] 괄호 변환 (C++)

반응형

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

 

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

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

programmers.co.kr

[2020 카카오 블라인드 채용][프로그래머스] 괄호 변환 (C++)

 

#include <string>
#include <vector>
#include <map>
// #include <iostream>

using namespace std;

enum ActionType {
    ENTER=0,
    CHANGE,
    LEAVE,
};

map<string, string> idMap;
vector<pair<string, ActionType> > command;

vector<string> solution(vector<string> record) {
    vector<string> answer;

    for(int i=0;i<record.size();i++) {
        string str=record[i];
        string token;
        string actionType;
        string uid;
        string nickName;
        int pos=0;

        if((pos=str.find(" ")) != string::npos) {
            token=str.substr(0,pos);
            actionType=token;

            str.erase(0,pos+1);
        }

        if((pos=str.find(" ")) != string::npos) {
            token=str.substr(0,pos);
            uid=token;

            str.erase(0,pos+1);
        }

        nickName=str;

        // cout<<"i="<<i<<"=> uid="<<uid<<", nickName="<<nickName<<endl;
        if(actionType=="Enter") {
            command.push_back({uid,ENTER});
            idMap[uid]=nickName;
        }
        else if(actionType=="Change") {
            idMap[uid]=nickName;
        }
        else if(actionType=="Leave") {
            uid=nickName;
            command.push_back({uid,LEAVE});
        }
    }

    for(int i=0;i<command.size();i++) {

        string ans="";
        ans+=idMap[command[i].first]+"님이 ";

        if(command[i].second==ENTER) {
            ans+="들어왔습니다.";
        }
        else if(command[i].second==LEAVE) {
            ans+="나갔습니다.";
        }

        answer.push_back(ans);
    }

    return answer;
}

 

코드 설명

1단계> 명령을 보다 간단하게 저장하기 위해 command (stl::vector)를, uid - nickName을 매핑하기 위해 idMap (stl::map) 자료구조를 만든다.

2단계> 문자열을 파싱하여 Enter, Change, Leave에 대해 구분한다.

3단계> 파싱한 문자열을 앞서 만든 자료구조에 저장한다.

4단계> command 순서대로 문자열을 만들어서 answer에 push_back() 해주면 끝!

반응형