https://school.programmers.co.kr/learn/courses/30/lessons/42888
해당 문제는 결국 key값은 변동이 없고 value만 바뀌는 문제이다.
따라서 map을 사용하는 것이 적절하다.
1. 해당 key는 유저 아이디이며 value는 유저의 닉네임이 된다.
2. 각 단어의 공백은 stringstream ss 라는 변수를 통해
시프트 연산자를 통해 공백을 기점으로 단어를 끊어 받을 수 있다.
3. Enter, Leave, Change를 기점으로 분기해주면 된다.
3-1. Enter과 Change
value가 추가되거나 변화할 때의 과정
map에 새로운 value가 들어오는 시점에 필요하다.
3-2. Enter과 Leave
answer 벡터 내부에 들어갈 string을 넣어줄 때 필요하다.
해당 문제는 map 또는 unordered_map을 사용할 수 있다.
vector<string> solution(vector<string> record) {
vector<string> answer;
map<string, string> idMap;
// map에 값을 정해주는 순회 ("looping to assign values to a map")
for (int i = 0; i < record.size(); i++) {
stringstream ss(record[i]);
string cmd, id, name;
ss >> cmd;
if (cmd.compare("Enter") == 0) {
ss >> id >> name;
idMap[id] = name;
}
else if (cmd.compare("Change") == 0) {
ss >> id >> name;
idMap[id] = name;
}
}
// 벡터 answer 값을 정해주는 순회 ("looping to assing values to vector answer")
for (string const &it : record) {
stringstream ss(it);
string cmd, id;
ss >> cmd;
if (cmd.compare("Enter") == 0) {
ss >> id;
answer.push_back(idMap[id] + "님이 들어왔습니다.");
}else if (cmd.compare("Leave") == 0){
ss >> id;
answer.push_back(idMap[id] + "님이 나갔습니다.");
}
}
return answer;
}
STL map 사용 시 성능
STL unordered_map 사용 시 성능
별 차이 없다.
'콘솔창 & 윈도우창 > 코딩 테스트' 카테고리의 다른 글
프로그래머스 LV.2 가장 큰 수 (0) | 2024.11.19 |
---|---|
[PCCP 기출문제] LV.1 붕대감기 (0) | 2024.11.17 |
프로그래머스 LV.2 귤 고르기 (1) | 2024.11.15 |
프로그래머스 LV.2 기능개발 (1) | 2024.11.14 |
프로그래머스 LV.2 더 맵게 (0) | 2024.11.13 |