반응형
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42888
문제
코드 및 풀이
이 문제에서 구분을 해야하는 것은 Change에 집중을 해서 하면 되는 문자열 처리 문제였습니다.
1. 만약 입장하였을때 혹은 이름을 바꾸었을때에 대해서 map<uid, 이름아이디> 를 갱신해주는 형태로 진행하였습니다.
2. 입장혹은 나갈때 stateUser<pair<유저의 uid, 유저의 아이디>>에 push_back을 해주었습니다. (1은 입장, 0은 퇴장)
3. stateUser를 돌게 되면서 입장을 하였는지 퇴장을 하였는지에 대해서 answer에 push_back을 합니다.
/*
들어왔습니다, 나갔습니다로 메시지 출력
이름을 바꾸는것은 -> 나간 후 새로운 닉네임으로 혹은 채팅방에서 변경
입장, 퇴장, 변경에 대해서 저장을 한다.
그리고 나중에 일괄적으로 진행을 시킨다.
*/
#include <string>
#include <vector>
#include <sstream>
#include <map>
using namespace std;
vector<string> solution(vector<string> record) {
vector<string> answer;
vector<string> s;
vector<pair<string,int>> stateUser; //유저의 uid와 입출 상태(입 : 1, 출 : 2)
map<string,string> idUser; //uid와 아이디 저장 map
string token;
char delimeter = ' ';
for(int i = 0 ; i < record.size();i++){
istringstream iss(record[i]);
s.clear(); // s초기화
while(getline(iss,token,delimeter)){
s.push_back(token);
}
if(s[0] =="Enter" || s[0] == "Change")
idUser[s[1]] = s[2];
if(s[0] == "Enter")
stateUser.push_back(make_pair(s[1],1));
else if(s[0] == "Leave")
stateUser.push_back(make_pair(s[1],0));
}
for(int i = 0; i < stateUser.size();i++){
//입장일때
if(stateUser[i].second == 1){
answer.push_back(idUser[stateUser[i].first]+"님이 들어왔습니다.");
}
else{ //나갈때
answer.push_back(idUser[stateUser[i].first]+"님이 나갔습니다.");
}
}
return answer;
}
반응형
'알고리즘 > c++ 프로그래머스' 카테고리의 다른 글
[프로그래머스 땅따먹기] c++ (풀이 ,코드 , 개념) (0) | 2023.05.22 |
---|---|
[프로그래머스 주식가격] c++ (코드, 풀이) (0) | 2023.05.21 |
[프로그래머스 주차 요금 계산] c++ (풀이, 코드) (0) | 2023.05.21 |
[프로그래머스 더맵게] c++ (풀이,코드, 효율성 해결 과정) (0) | 2023.05.19 |
[프로그래머스 n진수 게임] c++ (풀이법, 코드) (0) | 2023.05.19 |
댓글