콘솔창 & 윈도우창/코딩 테스트

프로그래머스 LV.2 오픈채팅방 (카카오 코테)

뽀또치즈맛 2024. 11. 15. 14:16

https://school.programmers.co.kr/learn/courses/30/lessons/42888

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

해당 문제는 결국 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 사용 시 성능

 

 

별 차이 없다.