-
[2019 카카오 신입 공채 1차 코딩테스트] 1. 오픈채팅방알고리즘/etc 2019. 7. 13. 21:39반응형
자세한 문제 정보 및 풀이는 공식 사이트인 여기서 -> http://tech.kakao.com/2018/09/21/kakao-blind-recruitment-for2019-round-1/
문제를 읽고 단순 구현 문제라는 생각이 들었다.
결국 핵심은 uid에 해당하는 최종 닉네임이 뭔지를 매칭시키는 것이라고 생각해서 map을 사용했다!
먼저 record(명령어)를 cmd, uid, nickname으로 분리한다. 이 때 split함수를 쓰려고 했는데 C++에 없다는 것을 발견... Java에서는 아무 생각없이 썼던것같은데. 아무튼 그래서 호다닥 구현해주고
(Leave명령어 뒤에는 닉네임이 안들어온다는걸 깜빡하고 생각없이 구현했다. 자꾸 index 에러나서 뭐지?? 하다가 발견 ..문제잘읽기 ㅠㅠ)
이제 cmd를 보면서 uid와 nickname을 map을 이용해서 매핑시켜주면 된다. Enter명령어가 처음들어왔을 경우에는 무조건 map에 insert, 만약 map에서 찾았는데 uid에 매핑된 닉네임이 있을 경우에는 erase하고 덮어써주면된다!
간단쓰~
매핑까지끝났으면 record 하나하나 읽으면서 해당 명령어에 맞게 msg를 만들어서 answer에 푸쉬해주면 된다!
소스코드 보기
(코드 개판 주의)...더보기(
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108#include <string>#include <vector>#include <map>#include <iostream>using namespace std;vector<string> solution(vector<string> record) {vector<string> answer;vector<string> cmd;vector<string> uid;vector<string> nickName;map<string, string> m;for (int i = 0; i < record.size(); i++){string temp = "";int count = 0;for (int j = 0; j < record[i].size(); j++){if (record[i][j] == ' '){if (count == 0){cmd.push_back(temp);count++;temp = "";}else if (count == 1){uid.push_back(temp);count++;temp = "";}}elsetemp += record[i][j];}if (count == 1){uid.push_back(temp);nickName.push_back("djkldjlk");}elsenickName.push_back(temp);}//split records into answer, cmd, uid//m.insert({ "","" });for (int i = 0; i < record.size(); i++){if (cmd[i] == "Enter"){if (m.find(uid[i]) == m.end()){//cout << "NO" << endl;m.insert({ uid[i],nickName[i] });}//if it's first time entering, insert into mapelse{m.erase(m.find(uid[i]));m.insert({ uid[i],nickName[i] });}//else change nickname}else if (cmd[i] == "Change"){m.erase(m.find(uid[i]));m.insert({ uid[i],nickName[i] });}elsecontinue;}//mapping nicknames and uid with resultfor (int i = 0; i < record.size(); i++){if (cmd[i] == "Enter"){string msg = m[uid[i]];msg += "님이 들어왔습니다.";answer.push_back(msg);//cout << msg << endl;}else if (cmd[i] == "Leave"){string msg = m[uid[i]];msg += "님이 나갔습니다.";answer.push_back(msg);//cout << msg << endl;}else{continue;}}return answer;}int main(){vector<string> ans;vector<string> record = { "Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan" };ans = solution(record);}http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripterhttp://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs 반응형'알고리즘 > etc' 카테고리의 다른 글
알고리즘 언어 선택 / 언어 별 장단점 (6) 2021.03.14 기업 코딩테스트 준비 방법 , 알고리즘 공부 방법 (4) 2020.09.17 브라우저 IDE 추천 (0) 2020.04.10 JSON ? JSON Parsing? (0) 2019.09.21 [2019 카카오 신입 공채 1차 코딩테스트] 2. 실패율 (0) 2019.07.13