문제
https://programmers.co.kr/learn/courses/30/lessons/42888
코딩테스트 연습 - 오픈채팅방
오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오
programmers.co.kr
나의 풀이
#include <string>
#include <vector>
#include <unordered_map>
#include <sstream>
#include <iostream>
using namespace std;
vector<string> solution(vector<string> record) {
vector<string> answer;
string subRecord[200000][3];
unordered_map<string, string> users;
for (int i = 0; i < record.size(); i++) {
string tmp;
istringstream ss(record[i]);
for (int k = 0; getline(ss, tmp, ' '); k++) {
subRecord[i][k] = tmp;
}
if (subRecord[i][0].compare("Leave") != 0) {
users[subRecord[i][1]] = subRecord[i][2];
}
}
for (int i = 0; i < record.size(); i++) {
string insert = "";
if (subRecord[i][0].compare("Change") == 0) {
continue;
}
insert += users.find(subRecord[i][1])->second;
if (subRecord[i][0].compare("Enter") == 0) {
insert += "님이 들어왔습니다.";
}
else if (subRecord[i][0].compare("Leave") == 0) {
insert += "님이 나갔습니다.";
}
answer.push_back(insert);
}
return answer;
}
처음 for문을 돌때 공백을 기준으로 문자열을 잘라서 배열에 넣어둔다.
istringstream ss(record[i]);
for (int k = 0; getline(ss, tmp, ' '); k++) {
subRecord[i][k] = tmp;
}
그리고 아이디별로 가장 마지막 닉네임을 저장하기 위해 닉네임이 바뀔때마다 users라는 map의 닉네임을 변경한다.
코드에서는 Leave일때는 닉네임이 변경되지 않으므로 Leave가 아닐경우를 조건문으로 넣었다.
if (subRecord[i][0].compare("Leave") != 0) {
users[subRecord[i][1]] = subRecord[i][2];
}
그 이후에는 처음 나온 명령어에 맞는 문자열을 넣어줬다.
for (int i = 0; i < record.size(); i++) {
string insert = "";
if (subRecord[i][0].compare("Change") == 0) {
continue;
}
insert += users.find(subRecord[i][1])->second;
if (subRecord[i][0].compare("Enter") == 0) {
insert += "님이 들어왔습니다.";
}
else if (subRecord[i][0].compare("Leave") == 0) {
insert += "님이 나갔습니다.";
}
answer.push_back(insert);
}
'전공공부 > 코딩테스트' 카테고리의 다른 글
(c++) 프로그래머스 숫자 문자열과 영단어 (0) | 2022.01.06 |
---|---|
(c++) 프로그래머스 추석 트래픽 (0) | 2022.01.06 |
(c++) 프로그래머스 문자열 압축 (0) | 2022.01.04 |
(c++) 프로그래머스 신규 아이디 추천 (0) | 2022.01.04 |
(c++) 백준 1655번 가운데를 말해요 (0) | 2021.12.29 |