728x90
https://school.programmers.co.kr/learn/courses/30/lessons/42888
카카오 2019년 기출문제로 코딩테스트에서 자주 출제되는 맵을 적절히 사용해야하는 문제이다.
Insert가 들어오면 맵에 만약 유저 아이디가 존재하면 갱신하고 없으면 추가한다.
체인지가 들어오면 맵 유저 아이디 key에서 닉네임을 교체한다.
그리고 insert와 leave가 들어오면 순서 벡터에 유저 아이디와 나가고 들어감을 표시해둔다.
그리고 이후 순서 벡터대로 결과를 출력하면 된다.
그렇게 어렵진 않지만 한번에 제출해서 맞춘 것이 좋다. 한번에 맞춰야 코딩테스트에서도 한번에 맞출 수 있다,
#include <string>
#include <vector>
#include <iostream>
#include <map>
using namespace std;
map<string, string> userInfo;
vector<pair<string, string>> order;
vector<string> split(string str){
vector<string> res;
string tmp = "";
for(int i = 0; i < str.size(); i++){
if(str[i] == ' '){
res.push_back(tmp);
tmp = "";
}else
tmp += str[i];
}
res.push_back(tmp);
return res;
}
vector<string> solution(vector<string> record) {
vector<string> answer;
vector<vector<string>> processRecord;
for(int i = 0; i < record.size(); i++){
processRecord.push_back(split(record[i]));
}
for(auto records : processRecord){
if(records[0] == "Enter"){
if(userInfo.find(records[1]) == userInfo.end()){ // 못찾음
userInfo.insert({records[1], records[2]});
order.push_back({records[0], records[1]});
}else{ // 찾음
userInfo[records[1]] = records[2];
order.push_back({records[0], records[1]});
}
}else if(records[0] == "Leave"){
order.push_back({records[0], records[1]});
}else{
userInfo[records[1]] = records[2];
}
}
for(pair<string, string> info : order){
if(info.first == "Enter"){
answer.push_back(userInfo[info.second] + "님이 들어왔습니다.");
}else{
answer.push_back(userInfo[info.second] + "님이 나갔습니다.");
}
}
return answer;
}
'프로그래머스 풀이 > Lv 2' 카테고리의 다른 글
프로그래머스 - 2018 KAKAO BLIND RECRUITMENT[3차] 파일명 정렬 (0) | 2024.08.23 |
---|---|
프로그래머스 - 두 큐 합 같게 만들기 [2022 KAKAO TECH INTERNSHIP] (0) | 2024.08.17 |
프로그래머스 - k진수에서 소수 개수 구하기 (C++) (0) | 2024.05.16 |
프로그래머스 - [3차]압축 (C++, Java) (0) | 2024.05.14 |
프로그래머스 - 방문 길이 (C++) (0) | 2024.05.12 |