[문제보기]
2019_KAKAO_BLIND 오픈채팅방
코딩테스트 연습 - 오픈채팅방
오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오
programmers.co.kr
[풀이과정]
이 문제에서 입력값을 내가 원하는 대로 나눠주기 위해 strtok() 함수를 만들어 vector temp에 저장해주었다.(strtok() 함수는 방금 그 곡 문제의 -추가- 부분을 참고)
그리고 map을 사용하여 <유저 아이디, 닉네임>으로 key, value를 잡고 문제를 풀어나갔다.
"Enter"
vector info에 데이터를 저장 및 map m에 데이터가 있으면 수정, 없으면 삽입
"Leave"
vector info에 데이터 저장
"Change"
map m의 데이터 수정
[소스코드]
#include <string>
#include <vector>
#include <map>
#include <iostream>
using namespace std;
typedef struct _INFO{
string behavior;
string uid;
} INFO;
vector<string> strtok(string str, char delim=' '){
vector<string> ret;
int prev = 0;
for(int i=0; i<str.size(); i++){
if(str[i] == delim){
ret.push_back(str.substr(prev, i-prev));
prev = i+1;
}
}
if(prev != str.size())
ret.push_back(str.substr(prev, str.size()-prev));
return ret;
}
vector<string> solution(vector<string> record) {
vector<string> answer;
vector<INFO> info;
map<string, string> m;
for(int i=0; i<record.size(); i++){
vector<string> temp = strtok(record[i]);
if(temp[0] == "Enter"){
info.push_back({temp[0], temp[1]});
m[temp[1]] = temp[2];
}
else if(temp[0] == "Leave"){
info.push_back({temp[0], temp[1]});
}
else{
m[temp[1]] = temp[2];
}
}
for(int i=0; i<info.size(); i++){
string s;
if(info[i].behavior == "Enter"){
s = m[info[i].uid] + "님이 들어왔습니다.";
}
else{
s = m[info[i].uid] + "님이 나갔습니다.";
}
answer.emplace_back(s);
}
return answer;
}
[해결 과정 중 실수한 부분]
맨 처음에 문제를 풀 때는 struct를 이용하여 자료형을 만들고 동작을 저장하는 vector, 닉네임을 저장하는 vector 2개를 사용하였다. 그리고 출력하는 부분에서 for문을 사용하여 닉네임을 저장하는 vector에 uid를 검사하고 일치하는
닉네임을 출력하였다. 하지만 이 부분에서 출력을 할 때마다 for문을 통해 검사를 해주어야 되서 테스트케이스 24번
이후에는 시간초과가 나왔다.
그래서 블로그를 참고하여 map을 사용하여 key, value를 통해 O(1) 시간으로 출력하게 만들었다.
https://hwan-shell.tistory.com/171
'알고리즘 스터디 > Programmers' 카테고리의 다른 글
[프로그래머스][C++] 2018 KAKAO BLIND. n진수 게임 (level 2) (0) | 2020.09.01 |
---|---|
[프로그래머스][C++] 2018 KAKAO BLIND. 방금 그 곡 (level 2) (0) | 2020.08.31 |
[프로그래머스] 2018 KAKAO BLIND 캐시 (level 2) (0) | 2020.08.27 |
[프로그래머스][C+] 2018 KAKAO BLIND. 뉴스 클러스터링 (level 2) (0) | 2020.08.26 |
[프로그래머스][C+] 2018 KAKAO BLIND. 비밀 지도 (level 1) (0) | 2020.08.26 |