문제 링크:
코딩테스트 연습 - 오픈채팅방 | 프로그래머스
오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오픈 채팅방을 개설한 사람을 위해, 다양한 사람들이 들어오고, 나가는 것을 지켜볼 수 있는 관리자창을 만들기로 했다. 채팅방에 누군가 들어오면 다음 메시지가 출력된다. [닉네임]님이 들어왔습니다. 채팅방에서 누군가 나가면 다음 메시지가 출력된다. [닉네임]님이 나갔습니다. 채팅
programmers.co.kr
해설 링크:
2019 카카오 신입 공채 1차 코딩 테스트 문제 해설
작년에 이어 올해도 블라인드 전형으로 카카오 개발 신입 공채가 시작되었습니다! 그 첫 번째 관문으로 1차 온라인 코딩 테스트가 지난 9월 15일(토) 오후 2시부터 7시까지 5시간 동안 치러졌는데요. 지원자분들 만큼이나 준비위원들도 테스트가 문제없이, 공정하게 치러질 수 있도록 많은 준비를 했고 두근 거리는 마음으로 끝까지 온라인 테스트를 모니터링했답니다. 문제는 작년과 비슷하게 구현 문제 위주로 쉬운 난이도에서 어려운 […]
tech.kakao.com
코드:
/* 1. 유저 아이디 형식이 uidXXXX꼴이라고 생각해버리고 XXXX를 정수로 받아버림... */
#include <vector>
#include <string>
#include <unordered_map>
using namespace std;
vector<string> solution(vector<string> record) {
vector<pair<bool, string>> cmd_uid;
unordered_map<string, string> uid_nck;
for (int i = record.size() - 1; i >= 0; --i) {
string uid;
int j = (record[i][0] == 'C') + 6;
if (record[i][0] == 'L')
for (; j < record[i].size(); ++j)
uid.push_back(record[i][j]);
else
for (; record[i][j] != ' '; ++j)
uid.push_back(record[i][j]);
if (uid_nck.find(uid) == uid_nck.end() && j < record[i].size()) {
string nck;
for (++j; j < record[i].size(); ++j)
nck += record[i][j];
uid_nck[uid] = nck;
}
if (record[i][0] != 'C')
cmd_uid.emplace_back(record[i][0] == 'E', uid);
}
vector<string> answer;
for (auto it = cmd_uid.rbegin(); it != cmd_uid.rend(); ++it){
if((*it).first)
answer.push_back(uid_nck[(*it).second] + "님이 들어왔습니다.");
else
answer.push_back(uid_nck[(*it).second] + "님이 나갔습니다.");
}
return answer;
}