문제 위치 : https://school.programmers.co.kr/learn/courses/30/lessons/42888
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문자열에서 요소들을 피싱하여 해결하는 문제이다.
명령이 가장 먼저 들어오므로 명령어를 추출한 다음 이후의 구성에 따라 따로 입력받아 추출하여 관리하였다.
변화를 반영하여 한 번에 출력해야하므로 출입과 관련한 커맨드sms action에 모두 기록하고 ID와 닉네임은 1대1로 매칭이 되므로 맵에 저장하였다.
입력으로 입장이 들어오면 맵에 추가하고 변경이 들어오면 맵을 통해 변경해주었다.
이후, action을 순회하며 해당하는 id를 가진 인물에 맞는 동작 여부를 id에 해당하는 닉네임을 저장한 맵에서 따와 answer에 저장한 다음 answer를 return 하도록 하였다.
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
vector<string> solution(vector<string> record) {
vector<string> answer;
unordered_map<string, string> userMap; // ID와 최종 닉네임을 저장하는 맵
vector<pair<string, string>> actions; // 최종 출력을 위한 명령 기록
// 1. 모든 기록을 순회하며 userMap과 actions를 업데이트
for (string line : record) {
string cmd = line.substr(0, line.find(' ')); // 명령어 추출
line.erase(0, line.find(' ') + 1); // 명령어와 공백 제거
if (cmd == "Enter") {
string uid = line.substr(0, line.find(' ')); // ID 추출
string name = line.substr(line.find(' ') + 1); // 닉네임 추출
userMap[uid] = name; // ID에 해당하는 최종 닉네임 저장
actions.push_back({uid, "님이 들어왔습니다."}); // 행동 기록
} else if (cmd == "Leave") {
string uid = line; // ID 추출
actions.push_back({uid, "님이 나갔습니다."}); // 행동 기록
} else if (cmd == "Change") {
string uid = line.substr(0, line.find(' ')); // ID 추출
string name = line.substr(line.find(' ') + 1); // 닉네임 추출
userMap[uid] = name; // ID에 해당하는 최종 닉네임 저장
}
}
// 2. actions 벡터를 기반으로 최종 출력 생성
for (auto action : actions) {
string uid = action.first;
string message = userMap[uid] + action.second; // 최종 닉네임과 메시지 결합
answer.push_back(message);
}
return answer;
}
'문제 풀이 > 문제 풀이(프로그래머스)' 카테고리의 다른 글
PCCP 기출문제[PCCP 기출문제] > 1번 / 붕대 감기 (0) | 2024.11.11 |
---|---|
2021 KAKAO BLIND RECRUITMENT > 합승 택시 요금 (0) | 2024.11.08 |
2019 KAKAO BLIND RECRUITMENT > 길 찾기 게임 (0) | 2024.11.06 |
코딩테스트 > 연습 문제 > 최고의 집합 (0) | 2024.10.28 |
코딩테스트 연습스택/큐 올바른 괄호 (0) | 2024.10.25 |