안녕하세요! 테크지니어22입니다.
오늘은 프로그래머스 알고리즘 오픈 채팅방을 풀어보도록 하겠습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/42888
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[문제 접근]
이 문제는 문자열을 활용한 구현문제입니다. 유저아이디값이 있고, 이에 매칭되는 닉네임이 변경되는 문제이기 때문에 unorded_map을 활용하여 풀었습니다.
[풀이 전략]
1. c++은 split함수가 없기 때문에 직접 구현합니다.
2. for문을 돌면서
- Enter와 Change에 해당되면 해쉬맵의 키는 유저아이디, 값은 닉네임으로 설정해줍니다.
- Change를 제외하고 새로운 recordList에 삽입합니다.
3. recordList를 돌면서 Enter와 Leave를 출력값의 문자열에 대응하여 answer에 삽입합니다.
[코드]
문자열 split 함수
// split 함수
vector<string> split(string &s, string &sep) {
vector<string> ret;
int pos = 0 ;
while(pos < s.size() ) {
int nxt_pos = s.find(sep, pos); // pos번째 인덱스부터 sep가 시작하는 위치를 반환.
if(nxt_pos == -1) nxt_pos = s.size();
if(nxt_pos - pos > 0) ret.push_back(s.substr(pos, nxt_pos - pos));
pos = nxt_pos + sep.size();
}
return ret ;
}
최종 코드
vector<string> solution(vector<string> record) {
vector<string> answer;
unordered_map<string,string> m;
vector<vector<string>> recordList ;
for(string &e : record) {
string sep = " ";
auto temp = split(e,sep);
if(temp[0] != "Leave"){
m[temp[1]] = temp[2];
}
if(temp[0] != "Change") recordList.push_back(temp);
}
for(vector<string> &e : recordList) {
string str = "" ;
if(e[0] == "Enter") {
str = m[e[1]] + "님이 들어왔습니다.";
}
else {
str = m[e[1]] + "님이 나갔습니다.";
}
answer.push_back(str);
}
return answer;
}
[배울 점]
- split 함수코드 숙지하기
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 LV3/C++] 알고리즘 - 등산 코스 정하기 (1) | 2024.10.04 |
---|---|
[프로그래머스/C++] 알고리즘 - 표현 가능한 이진 트리. (0) | 2024.10.03 |
[프로그래머스/C++] 알고리즘 - 문자열 압축 (0) | 2024.07.13 |
[프로그래머스/C++] 알고리즘 - 괄호 변환 (0) | 2024.05.26 |
[프로그래머스/C++] 알고리즘 - 메뉴 리뉴얼 (0) | 2024.05.25 |