문제
https://programmers.co.kr/learn/courses/30/lessons/42888
나의 풀이
#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 |