반응형
https://programmers.co.kr/learn/courses/30/lessons/42888
[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() 해주면 끝!
반응형
'개발 > 알고리즘 & 자료구조' 카테고리의 다른 글
[2018 카카오 블라인드 채용][코딩테스트 1차] 뉴스 클러스터링 (C++) (0) | 2021.09.03 |
---|---|
[프로그래머스] 완주하지 못한 선수 (C++) (4) | 2021.09.01 |
[카카오 2018 코딩테스트 1차] 비밀지도 (2) | 2021.08.30 |
[카카오 2019 BLIND RECRUITMENT] 실패율 (프로그래머스) (0) | 2021.08.28 |
[카카오][2021 인턴십] 숫자 문자열과 영단어 (2) | 2021.08.26 |