μ€νμ±ν λ°©
λ¬Έμ
μΉ΄μΉ΄μ€ν‘ μ€νμ±ν λ°©μμλ μΉκ΅¬κ° μλ μ¬λλ€κ³Ό λνλ₯Ό ν μ μλλ°, λ³Έλ λλ€μμ΄ μλ κ°μμ λλ€μμ μ¬μ©νμ¬ μ±ν λ°©μ λ€μ΄κ° μ μλ€.
μ μ μ¬μμΈ κΉν¬λ£¨λ μΉ΄μΉ΄μ€ν‘ μ€ν μ±ν λ°©μ κ°μ€ν μ¬λμ μν΄, λ€μν μ¬λλ€μ΄ λ€μ΄μ€κ³ , λκ°λ κ²μ μ§μΌλ³Ό μ μλ κ΄λ¦¬μμ°½μ λ§λ€κΈ°λ‘ νλ€. μ±ν λ°©μ λκ΅°κ° λ€μ΄μ€λ©΄ λ€μ λ©μμ§κ° μΆλ ₯λλ€.
[λλ€μ]λμ΄ λ€μ΄μμ΅λλ€.
μ±ν λ°©μμ λκ΅°κ° λκ°λ©΄ λ€μ λ©μμ§κ° μΆλ ₯λλ€.
[λλ€μ]λμ΄ λκ°μ΅λλ€.
μ±ν λ°©μμ λλ€μμ λ³κ²½νλ λ°©λ²μ λ€μκ³Ό κ°μ΄ λ κ°μ§μ΄λ€.
- μ±ν λ°©μ λκ° ν, μλ‘μ΄ λλ€μμΌλ‘ λ€μ λ€μ΄κ°λ€.
- μ±ν λ°©μμ λλ€μμ λ³κ²½νλ€.
λλ€μμ λ³κ²½ν λλ κΈ°μ‘΄μ μ±ν λ°©μ μΆλ ₯λμ΄ μλ λ©μμ§μ λλ€μλ μ λΆ λ³κ²½λλ€.
μλ₯Ό λ€μ΄, μ±ν λ°©μ Muziμ ProdoλΌλ λλ€μμ μ¬μ©νλ μ¬λμ΄ μμλλ‘ λ€μ΄μ€λ©΄ μ±ν λ°©μλ λ€μκ³Ό κ°μ΄ λ©μμ§κ° μΆλ ₯λλ€.
Muziλμ΄ λ€μ΄μμ΅λλ€.
Prodoλμ΄ λ€μ΄μμ΅λλ€.
μ±ν λ°©μ μλ μ¬λμ΄ λκ°λ©΄ μ±ν λ°©μλ λ€μκ³Ό κ°μ΄ λ©μμ§κ° λ¨λλ€.
Muziλμ΄ λ€μ΄μμ΅λλ€.
Prodoλμ΄ λ€μ΄μμ΅λλ€.
Muziλμ΄ λκ°μ΅λλ€.
Muziκ° λκ°ν λ€μ λ€μ΄μ¬ λ, Prodo λΌλ λλ€μμΌλ‘ λ€μ΄μ¬ κ²½μ° κΈ°μ‘΄μ μ±ν λ°©μ λ¨μμλ Muziλ Prodoλ‘ λ€μκ³Ό κ°μ΄ λ³κ²½λλ€.
Prodoλμ΄ λ€μ΄μμ΅λλ€.
Prodoλμ΄ λ€μ΄μμ΅λλ€.
Prodoλμ΄ λκ°μ΅λλ€.
Prodoλμ΄ λ€μ΄μμ΅λλ€.
μ±ν λ°©μ μ€λ³΅ λλ€μμ νμ©νκΈ° λλ¬Έμ, νμ¬ μ±ν λ°©μλ ProdoλΌλ λλ€μμ μ¬μ©νλ μ¬λμ΄ λ λͺ μ΄ μλ€. μ΄μ , μ±ν λ°©μ λ λ²μ§Έλ‘ λ€μ΄μλ Prodoκ° RyanμΌλ‘ λλ€μμ λ³κ²½νλ©΄ μ±ν λ°© λ©μμ§λ λ€μκ³Ό κ°μ΄ λ³κ²½λλ€.
Prodoλμ΄ λ€μ΄μμ΅λλ€.
Ryanλμ΄ λ€μ΄μμ΅λλ€.
Prodoλμ΄ λκ°μ΅λλ€.
Prodoλμ΄ λ€μ΄μμ΅λλ€.
μ±ν λ°©μ λ€μ΄μ€κ³ λκ°κ±°λ, λλ€μμ λ³κ²½ν κΈ°λ‘μ΄ λ΄κΈ΄ λ¬Έμμ΄ λ°°μ΄ recordκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, λͺ¨λ κΈ°λ‘μ΄ μ²λ¦¬λ ν, μ΅μ’ μ μΌλ‘ λ°©μ κ°μ€ν μ¬λμ΄ λ³΄κ² λλ λ©μμ§λ₯Ό λ¬Έμμ΄ λ°°μ΄ ννλ‘ return νλλ‘ solution ν¨μλ₯Ό μμ±νλΌ.
μ νμ¬ν
- recordλ λ€μκ³Ό κ°μ λ¬Έμμ΄μ΄ λ΄κΈ΄ λ°°μ΄μ΄λ©°, κΈΈμ΄λ
1
μ΄μ100,000
μ΄νμ΄λ€. - λ€μμ recordμ λ΄κΈ΄ λ¬Έμμ΄μ λν μ€λͺ
μ΄λ€.
- λͺ¨λ μ μ λ [μ μ μμ΄λ]λ‘ κ΅¬λΆνλ€.
- [μ μ μμ΄λ] μ¬μ©μκ° [λλ€μ]μΌλ‘ μ±ν λ°©μ μ μ₯ - Enter [μ μ μμ΄λ] [λλ€μ] (ex. Enter uid1234 Muzi)
- [μ μ μμ΄λ] μ¬μ©μκ° μ±ν λ°©μμ ν΄μ₯ - Leave [μ μ μμ΄λ] (ex. Leave uid1234)
- [μ μ μμ΄λ] μ¬μ©μκ° λλ€μμ [λλ€μ]μΌλ‘ λ³κ²½ - Change [μ μ μμ΄λ] [λλ€μ] (ex. Change uid1234 Muzi)
- 첫 λ¨μ΄λ Enter, Leave, Change μ€ νλμ΄λ€.
- κ° λ¨μ΄λ 곡백μΌλ‘ ꡬλΆλμ΄ μμΌλ©°, μνλ²³ λλ¬Έμ, μλ¬Έμ, μ«μλ‘λ§ μ΄λ£¨μ΄μ Έμλ€.
- μ μ μμ΄λμ λλ€μμ μνλ²³ λλ¬Έμ, μλ¬Έμλ₯Ό ꡬλ³νλ€.
- μ μ μμ΄λμ λλ€μμ κΈΈμ΄λ
1
μ΄μ10
μ΄νμ΄λ€. - μ±ν λ°©μμ λκ° μ μ κ° λλ€μμ λ³κ²½νλ λ± μλͺ» λ μ λ ₯μ μ£Όμ΄μ§μ§ μλλ€.
μ½λ
#include <string>
#include <vector>
#include <map>
using namespace std;
void splitArr(string str, vector<string>& result){
string a=""; int i=0;
while(i<str.size()){
if(str[i]!=' ')
a+=str[i];
else{
result.push_back(a);
a="";
}
i++;
}
result.push_back(a);
return;
}
vector<string> solution(vector<string> record) {
vector<string> answer;
map<string, string> Changes;
int size = record.size();
// make map of uid
vector<string> splitResult; // c++μ GCκ° μμ => νλμ μμ νμ©
for(int i=0; i<size; i++){
splitResult.clear();
splitArr(record[i], splitResult);
if(!splitResult[0].compare("Change")){ // μ±ν
λ°©μμ λλ€μμ λ³κ²½νλ€.
Changes[splitResult[1]]=splitResult[2];
}else if(!splitResult[0].compare("Enter")){ // μ±ν
λ°©μ λκ° ν, μλ‘μ΄ λλ€μμΌλ‘ λ€μ λ€μ΄κ°λ€.
Changes[splitResult[1]]=splitResult[2];
}
}
for(int i=0; i<size; i++){
splitResult.clear();
splitArr(record[i], splitResult);
if(!splitResult[0].compare("Enter"))
answer.push_back(Changes[splitResult[1]]+"λμ΄ λ€μ΄μμ΅λλ€.");
else if(!splitResult[0].compare("Leave"))
answer.push_back(Changes[splitResult[1]]+"λμ΄ λκ°μ΅λλ€.");
}
return answer;
}
νμ΄
μ°μ , μ£Όμ΄μ§λ recordμ κΈΈμ΄λ μ΅λ 10^5μ΄λ€.
κ·Έλ λ€λ©΄ μ€λ³΅ loopλ μκΈ°λ©΄ μλκ³ , λ³λ ¬λ‘ μ¬μ©ν μλ°μ μμΌλ©° 곡κ°μ μΈ μΈ‘λ©΄μμλ κ³ λ €λ₯Ό ν΄μΌνλ€.
μ²μμ λμΆ© μ§λ³Έ λ¬Έμ ν΄κ²° νλ‘μΈμ€λ λ€μκ³Ό κ°λ€.
- μΌλ¨ split νμ¬ λͺ λ Ήμ΄, userid, λλ€μμ λΆλ¦¬νλ€.
- λͺ λ Ήμ΄ λ³λ‘ λΆκΈ°νμ¬ Enterμ Changeμμ λλ€μμ΄ λ³κ²½λμμ λ, ν΄λΉ uidμ μ μ₯νλ€.
- Enterμ Leave λͺ λ Ήμ΄λ₯Ό λΆκΈ°νμ¬ μΆλ ₯νλ©°, uidμ ν΄λΉνλ λλ€μμ μ½μ νλ€.
κ²°κ΅ λλ€μμ ν΄λΉ uidμ κ°μ₯ λ§μ§λ§μΌλ‘ λΆμ¬λ κ²μ΄ μΆλ ₯λλ€. λ°λΌμ, uidλ₯Ό keyλ‘ λκ³ λλ€μμ valueλ‘ κ°μ§λ mapμ μμ±νμ¬ κ΄λ¦¬νλ©΄ νΈν κ²μ΄λ€.
μκ°λ³΅μ‘λ μΈ‘λ©΄μμλ 10^5μ΄ 2λ²λ§ λλ©΄ λκΈ° λλ¬Έμ λ¬Έμ μλ€.
μ½λμ ν¨κ» ꡬνκ³Όμ μ μ€λͺ ν΄λ³΄μ.
- c++μμ splitνλ string ν€λ ν¨μκ° μμλ€. λ°λΌμ μ§μ ꡬννλ€.
void splitArr(string str, vector<string>& result){
string a=""; int i=0;
while(i<str.size()){
if(str[i]!=' ')
a+=str[i];
else{
result.push_back(a);
a="";
}
i++;
}
result.push_back(a);
return;
}
vector<string> splitResult; // c++μ GCκ° μμ => νλμ μμ νμ©
for(int i=0; i<size; i++){
splitResult.clear();
splitArr(record[i], splitResult);
}
μ΄ κ³Όμ μμ μλμ νΈμΆμ½λλ₯Ό 보면 맀κ°λ³μλ‘ forλ¬Έ λ΄μ μ§μλ³μκ° μλ μ μλ³μλ₯Ό λκΈ°κ³ μλ€. μ μλ³μλ₯Ό clearνκ³ κ³μ λ€μ μ¬μ©ν¨μΌλ‘μ¨, GCκ° μλ c++μ΄ λ©λͺ¨λ¦¬λ₯Ό λλΉνμ§ μλλ‘ νλ€.
- map μλ£κ΅¬μ‘° μ΄μ©
if(!splitResult[0].compare("Change")){ // μ±ν
λ°©μμ λλ€μμ λ³κ²½νλ€.
Changes[splitResult[1]]=splitResult[2];
}else if(!splitResult[0].compare("Enter")){ // μ±ν
λ°©μ λκ° ν, μλ‘μ΄ λλ€μμΌλ‘ λ€μ λ€μ΄κ°λ€.
Changes[splitResult[1]]=splitResult[2];
}
맡 μλ£κ΅¬μ‘°λ₯Ό μ΄μ©νλ©΄, νΉμ keyμ λν valueμ κ°±μ μ μμ½κ² ꡬνν μ μλ€. κΈ°μ‘΄μ keyκ° μ‘΄μ¬νλμ§ μλμ§λ₯Ό λ°μ§ νμλ μμ΄μ μ’λ€.
- μΆλ ₯
for(int i=0; i<size; i++){
splitResult.clear();
splitArr(record[i], splitResult);
if(!splitResult[0].compare("Enter"))
answer.push_back(Changes[splitResult[1]]+"λμ΄ λ€μ΄μμ΅λλ€.");
else if(!splitResult[0].compare("Leave"))
answer.push_back(Changes[splitResult[1]]+"λμ΄ λκ°μ΅λλ€.");
}
μ±μ κ²°κ³Ό
μλμͺ½μ λ¬΄μ¨ ν μΌλ₯Ό λ£μ΄λκ±°λ μΉ΄μΉ΄μ€..
μ£Όμν κ²
compareν¨μλ₯Ό strcmpλ‘ μ¬μ©νλ €κ³ cstring ν€λλ₯Ό importν΄λ΄€μ§λ§ μ¬μ©λμ§ μμλ€. string ν€λμ str1.compare(str2)
ν¨μλ₯Ό μ΄μ©νλ©΄ λλ€. λ€λ§, μ΄ ν¨μλ μΌμΉνμ λ 0, λΆμΌμΉνμ λ -1μ λ°ννλ―λ‘ 0 λ°νμ μ°Έμ΄λΌλ κ²μ μκ³ μμ΄μΌνλ€.
λ€λ₯Έ μ¬λμ νμ΄
for(string input:record)
{
stringstream ss(input);
ss>>command;
ss>>uid;
if(command=="Enter" || command=="Change")
{
ss>>ID;
m[uid]=ID;
}
}
- forλ¬Έμ foreachλ¬Έμ ννλ‘ μ΄ κ²
- stringstreamμ μ΄μ©νμ¬ (sstream ν€λ ν¨μ) >> μ°μ°μλ‘ μμ½κ² splitμ ꡬνν κ²
Comment