🔵 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42888
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
🔵 문제 해결
- string(uid) - string(이름) 형식의 hash를 만들어 Enter 시 데이터 등록, Change 시 이름 변경을 한다.
- 이후 Enter, Leave, Change에 따라 hash의 name값과 문자열을 출력하면 끝이다.
🔵 공백을 기준으로 문자열 자르기
sstream 라이브러리의 stringstream을 사용하여 공백을 기준으로 문자열을 자를 수 있다.
사용 방법은 다음과 같다.
string command, uid, name;
// 공백을 기준으로 문자열 자르기
stringstream ss(record[i]);
ss >> command >> uid >> name;
stringstream 객체를 만들고 인수로 문자열을 전달한 다음, >> 연산자로 각 변수에 넣어주면 된다.
🔵 전체 코드
#include <string>
#include <vector>
#include <sstream>
#include <unordered_map>
using namespace std;
// string(uid) - string(이름)
// enter - hash에 데이터 저장
// change - hash에 등록된 이름 수정
// leave ...
vector<string> solution(vector<string> record) {
vector<string> answer;
unordered_map<string, string> table;
for (int i = 0; i < record.size(); i++)
{
string command, uid, name;
// 공백을 기준으로 문자열 자르기
stringstream ss(record[i]);
ss >> command >> uid >> name;
if (command == "Enter" || command == "Change")
{
table[uid] = name;
}
}
for (int i = 0; i < record.size(); i++)
{
string command, uid;
// 공백을 기준으로 문자열 자르기
stringstream ss(record[i]);
ss >> command >> uid;
if (command == "Enter")
{
string str = table[uid] + "님이 들어왔습니다.";
answer.push_back(str);
}
else if(command == "Leave")
{
string str = table[uid] + "님이 나갔습니다.";
answer.push_back(str);
}
}
return answer;
}
🔵 시간 복잡도
record의 길이를 N이라 할 때, 시간 복잡도는 O(N)이다.
'PS' 카테고리의 다른 글
| [C++] Programmers Lv. 1 "신고 결과 받기" (0) | 2025.05.28 |
|---|---|
| [C++] Programmers Lv. 3 "베스트앨범" (0) | 2025.05.27 |
| [C++] Programmers Lv. 2 "할인 행사" (0) | 2025.05.24 |
| [C++] Programmers Lv. 2 "전화번호 목록" (1) | 2025.05.23 |
| [C++] Programmers Lv. 2 "영어 끝말잇기" (0) | 2025.05.22 |