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);
    }

맵을통한 중복 제거를 했다. 내가봤을땐 둘다 똑같은데 무엇이 문제인지 잘 모르겠다...;;

profile
내일 아침 눈을 떳을 때, '기대되는 오늘 하루를 만들기 위해' 나는 오늘도 생각하고 고민한다.

0개의 댓글