프로그래머스/Level_2

[Level_2 / C++ / Python / 카카오] 오픈채팅방

배발자 2022. 3. 31.
반응형
 

<stringstream> 공백으로 문자열 자르기

문자열이 공백이 주어진 상태로 주어진다면 공백을 기준으로 문자열을 자를 수 있다. 예) string s = "abc def gh" ; 해당 문자열을 "abc" , "def" , "gh" 로 자르는 거다. 해당 문법을 알아보자. #include #inclu..

baebalja.tistory.com


1. stringstream 을 활용해서 띄워쓰기에 따른 값들을 해당 변수에 저장한다. 

2. unordered_map 을 활용해 uid에 따른 name을 저장한다. (change 명령이 들어와도 덮어씌우면 된다.)

3. map에서 uid에 해당하는 value값을 출력하면 된다. 

#include <string>
#include <vector>
#include <map>
#include <sstream>
#include <unordered_map>
using namespace std;
vector<string> solution(vector<string> record){
    vector <string> ans; 
    string cmd, uid, name; 
    map<string, string> m; 
    for(auto x : record){
        stringstream ss(x); 
        ss>>cmd>>uid; 
        if(cmd =="Enter"||cmd=="Change"){
            ss>>name; 
            m[uid]=name; 
        }
    }
	for (string x : record) {
		stringstream ss(x); 
		ss >> cmd>>uid;
		name = (m.find(uid)->second);
		if (cmd == "Enter")	ans.push_back(name + "님이 들어왔습니다.");
		else if (cmd == "Leave") ans.push_back(name + "님이 나갔습니다.");
	}
	return ans; 	    
    
}
 

코딩테스트 연습 - 오픈채팅방

오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오

programmers.co.kr

<Python>

def solution(record):
    answer = []
    dic = {}
    
    for sentence in record:        
        sentence_split = sentence.split()     
        if len(sentence_split)==3:
            dic[sentence_split[1]]=sentence_split[2]
    
    for sentence in record:
        sentence_split = sentence.split()       
        if sentence_split[0] =='Enter':
            answer.append('%s님이 들어왔습니다.' %dic[sentence_split[1]])
        elif sentence_split[0]=='Leave':
            answer.append('{0}님이 나갔습니다.'.format(dic[sentence_split[1]]))       
    return answer

두가지 방식.

1. 문자열, 정수, 실수를 % 로 포매팅

2. str.format 

 

반응형

댓글