https://programmers.co.kr/learn/courses/30/lessons/42888
내소스 틀렸음.
#include <string>
#include <vector>
#include <map>
#include <iostream>
using namespace std;
vector<string> solution(vector<string> record) {
vector<string> answer;
vector<vector<string>> vvsTemp;
map<string, string> mapname;
string swho = "님이";
string senter = "들어왔습니다.";
string sleave = "나갔습니다.";
for (int i = 0; i < record.size(); i++)//문자열 자르기
{
string sdoing = "";
string sid = "";
string sname = "";
vector<string>vTemp;
int Location1(0);
int Location2(0);
int iCnt(0);
for (int j = 0; j < record[i].size(); j++)
{
if (record[i][j] == ' ')
{
if (iCnt == 0)
{
iCnt++;
Location1 = j;
sdoing = record[i].substr(0, Location1);
if (sdoing == "Leave") // Leave인 경우입니다.
{
sid = record[i].substr(Location1 + 1);//나머지전부다.
sname = "";
}
}
else if (iCnt == 1)
{
Location2 = j;
if (sdoing == "Enter" || sdoing == "Change")
{
sid = record[i].substr(Location1 + 1, Location2 - Location1 - 1);
sname = record[i].substr(Location2 + 1);//나머지전부다.
}
}
}
}
vTemp.emplace_back(sdoing);
vTemp.emplace_back(sid);
vTemp.emplace_back(sname);
vvsTemp.emplace_back(vTemp);
}
/* for (int i = 0; i < vvsTemp.size(); i++) {
if (vvsTemp[i][0] == "Enter" || vvsTemp[i][0] == "Change") {
mapname[vvsTemp[i][1]] = vvsTemp[i][2];
}
}*/
for (int i = 0; i < vvsTemp.size(); i++)
{
if (vvsTemp[i][0] == "Change" || vvsTemp[i][0] == "Enter")
{
for (int j = 0; j <= i; j++)
{
if (vvsTemp[j][1] == vvsTemp[i][1])//고유 아이디 같은경우입니다.
{
vvsTemp[j][2] = vvsTemp[i][2]; //이름을 바꿉니다.
}
}
}
}
for (int i = 0; i < vvsTemp.size(); i++)
{
string sTemp = "";
sTemp = vvsTemp[i][2] + swho + " ";//프로도님이
if (vvsTemp[i][0] == "Enter") sTemp += senter;
else if (vvsTemp[i][0] == "Leave") sTemp += sleave;
else if (vvsTemp[i][0] == "Change") continue;
answer.emplace_back(sTemp);
}
for (int i = 0; i < answer.size(); i++)
{
cout << answer[i] << endl;
}
return answer;
}
for (int i = 0; i < vvsTemp.size(); i++)
{
if (vvsTemp[i][0] == "Change" || vvsTemp[i][0] == "Enter")
{
for (int j = 0; j <= i; j++)
{
if (vvsTemp[j][1] == vvsTemp[i][1])//고유 아이디 같은경우입니다.
{
vvsTemp[j][2] = vvsTemp[i][2]; //이름을 바꿉니다.
}
}
}
}
여기서 틀렸는데, 어떤 로직이 틀렸는지 잘 모르겠다.
다른 답지에선 이 논리대신
for (int i = 0; i < vvsTemp.size(); i++) {
if (vvsTemp[i][0] == "Enter" || vvsTemp[i][0] == "Change") {
mapname[vvsTemp[i][1]] = vvsTemp[i][2];
}
}
for (int i = 0; i < vvsTemp.size(); i++)
{
string sTemp = "";
sTemp = mapname[vvsTemp[i][1]] + swho + " ";//프로도님이
if (vvsTemp[i][0] == "Enter") sTemp += senter;
else if (vvsTemp[i][0] == "Leave") sTemp += sleave;
else if (vvsTemp[i][0] == "Change") continue;
answer.emplace_back(sTemp);
}
맵을통한 중복 제거를 했다. 내가봤을땐 둘다 똑같은데 무엇이 문제인지 잘 모르겠다...;;