728x90
반응형
해당 문제는 주어지는 record에서 상태, 아이디, 닉네임을 추출해서 알맞게 사용하는 문제로 3가지 정보 분리 후 차례대로 문제를 해결하면 쉽게 풀 수 있다.
#include <string>
#include <vector>
#include <map>
#include <sstream>
using namespace std;
vector<string> solution(vector<string> record) {
vector<string> answer;
//State와 id를 저장
vector<pair<string, string>> v;
//string : id, string : name
map<string, string> m;
//for문이 끝나면 최종 id와 그에 맞는 name이 저장된다.
for(string str : record)
{
//공백을 기준으로 문자열을 나누어준다.
stringstream ss(str);
string state;
string id;
string name;
//나눈 문자열을 차례대로 state, id, name에 저장한다.
ss >> state >> id >> name;
//state와 id를 순서대로 저장한다.
v.push_back(make_pair(state, id));
//이름 변경은 Enter, Change에서만 변경되기에 이때만 이름 변경
if(state == "Enter" || state == "Change")
{
//id는 바뀌지 않으니 id를 키 값으로 이름을 저장한다.
m[id] = name;
}
}
//저장된 순서를 한개씩 가져온다.
for(pair<string, string> p : v)
{
//state가 Enter면
if(p.first == "Enter")
{
//현재 유저의 최종 이름을 가져와 문자열을 만든다.
answer.push_back(m[p.second] + "님이 들어왔습니다.");
}
//state가 Leave면
else if(p.first == "Leave")
{
answer.push_back(m[p.second] + "님이 나갔습니다.");
}
}
return answer;
}
728x90
반응형
'프로그래밍 > 코딩테스트' 카테고리의 다른 글
코딩테스트 : [1차] 캐시 (0) | 2025.02.04 |
---|---|
코딩테스트 : 2 x n 타일링 (0) | 2025.02.04 |
코딩테스트 : 숫자 변환하기 (0) | 2025.02.03 |
코딩테스트 문제 풀기 팁 (0) | 2025.02.03 |
코딩테스트 : 택배상자 (0) | 2025.02.03 |