반응형
728x170
https://school.programmers.co.kr/learn/courses/30/lessons/42888
아주 좋은 문제라고 볼 수 있다.
문자열 처리를 함과 동시에 구현 문제이다.
감이 오면 쉽지만.. 어떻게 할지 모른다면 못푼다..ㅠ
내 생각의 흐름을 보여주자면
결국 uid에 해당하는 마지막 변경 닉네임만이 중요하다.
문제의 출력도 실시간이 아닌 마지막, 모두 다 처리했을 때를 물어본다.
이것이 핵심이라고 할 수 있다.
그리고 stringstream을 쓰는 것도 핵심이다.
문자열 처리에 정말 도움이 된다.
#맞은 풀이
#include <string>
#include <vector>
#include <map>
#include <sstream>
using namespace std;
vector<string> solution(vector<string> record) {
vector<string> answer;
map<string, string> idmap; //id를 key, nickname을 value
vector<pair<string,string>> rec; // <id, cmd> 쌍이 순서대로 들어있음
//record는 공백으로 token이 구분되어 있음
//stringstream으로 추출
for(auto it = record.begin(); it != record.end(); it++){
stringstream ss(*it); //it가 가리키는 값(string)을 바로 stringstream으로 만듦
string cmd, id, name; //3가지 토큰 존재
ss >> cmd; //공백까지 읽음
//명령별로 뒤에 오는 token이 다름 compare 함수는 같을때 0을 리턴
if(cmd.compare("Enter") == 0){
ss >> id >> name;
idmap[id] = name;
}else if(cmd.compare("Change") == 0){
ss >> id >> name;
idmap[id] = name;
}else{
ss >> id;
}
rec.push_back({id,cmd});
}
//마지막 출력할 때는 idmap에 저장된 nickname을 출력하면 될 것임
for(auto it = rec.begin(); it != rec.end(); it++){
auto now = *it;
auto nId = now.first;
auto nCmd = now.second;
if(nCmd.compare("Enter") == 0){
answer.push_back( idmap[nId] + "님이 들어왔습니다.");
}else if(nCmd.compare("Leave") == 0){
answer.push_back( idmap[nId] + "님이 나갔습니다.");
}
}
return answer;
}
728x90
반응형
그리드형
'문제풀이(Problem Solving)' 카테고리의 다른 글
프로그래머스, 압축, C++ [CPP] ★★★★ (0) | 2022.09.14 |
---|---|
프로그래머스, 후보키, C++ [CPP] ★★★★★ (0) | 2022.09.14 |
백준, BOJ, 2492번, 보석C++ [CPP] ★★★★ (0) | 2022.09.07 |
백준, BOJ, 1826번, 연료 채우기C++ [CPP] ★★★★★ (0) | 2022.09.05 |
백준, BOJ, 12869번, 뮤탈리스크 C++ [CPP] ★★★★ (1) | 2022.09.05 |