Free Lines Arrow
본문 바로가기
Algorithm/프로그래머스 알고리즘

[프로그래머스] 오픈채팅방

by skahn1215 2021. 5. 23.
728x90
반응형

문제

 

분석

문제가 길다.

천천히 읽어 나갈 필요가 있다.

읽어보니 채팅방의 입장퇴장 그리고 ID 변경에 대한 Log를 기록하는 문제이다.

 

문제핵심

1. 닉네임은 변경가능하다. 중복도 허용한다.

2. 최종 출력은 변경된 닉네임으로 보여줘야 한다.

3. 입력은 다음과같다.

    커맨드 유저아이디 닉네임

 

문제는 3단계로 나누어 풀수 있을 것같다.

1. 입력 받은값 Parsing

    감사하게도 입력값은 space 로 나뉘어져 있다

    간단하게 stringstream 으로 나누자

 

2. 유저 아이디에 따른 닉네임변경(닉네임은 중복허용)

    키값으로 UserId를 정하고 닉네임을 value로 정할수 있겠다.

    map 을 사용하면 되겠다.

 

3. 최종 변경된 ID로 메세지 출력해주기

    위에 저장 된 map을 양식에 맞게 출력해준다.

 

구현

c++

#include <string>
#include <vector>
#include <sstream>
#include <iostream>
#include <map>
using namespace std;

vector<string> solution(vector<string> record) {
    vector<string> answer;
    string command;
    string ID;
    string uid;
  
    map<string, string> m;

    for(string input:record)
    {
        stringstream ss(input);
        ss >> command;
        ss >> uid;
        if (command=="Enter" || command=="Change")
        {
            ss >> ID;
            m[uid]=ID;
        }
    }

   for(string input:record)
    {
        stringstream ss(input);
        ss >> command;
        ss >> uid;
        if(command=="Enter")
        {
            ID=(m.find(uid)->second);
            string temp = ID+"님이 들어왔습니다.";
            answer.push_back(temp);
        }
      else if(command=="Leave")
      {
         ID=(m.find(uid)->second);
            string temp = ID+"님이 나갔습니다.";
         answer.push_back(temp);
      }
    }
    return answer;
}

 

java

import java.util.*;

class Solution {
    public String[] solution(String[] record) {
     
        ArrayList<String> log = new ArrayList();
        
        HashMap<String, String> map = new HashMap<String,String>();
        
        String command;
        String id;
        String nickName;

        for (int i = 0; i < record.length; i++) {
            String[] columnData = record[i].split(" ");
            command = columnData[0];
            id = columnData[1];
            
            if ((command.compareTo("Enter") == 0) || (command.compareTo("Change") == 0)) {
                nickName = columnData[2];
                map.put(id, nickName);     
            }
        }
        
        
        for (String input : record)
        {
            String[] columnData = input.split(" ");
            command = columnData[0];
            id = columnData[1];
            
            if (command.compareTo("Enter") == 0) {
                nickName = map.get(id);
                String message = nickName+"님이 들어왔습니다.";
                log.add(message);
            } else if (command.compareTo("Leave") == 0) {
                nickName = map.get(id);
                String message = nickName+"님이 나갔습니다.";
                log.add(message);
            }
        }
        
        
     
        String[] answer = new String[log.size()];
        answer = log.toArray(answer);
        
        
        return answer;
    }
}

 

 

 

문제링크

: https://programmers.co.kr/learn/courses/30/lessons/42888

 

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

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

programmers.co.kr

 

728x90
반응형

댓글