본문 바로가기
알고리즘 문제/프로그래머스

[프로그래머스 - Java] 오픈 채팅방 (2019 KAKAO BLIND RECRUITMENT)

by 건복치 2021. 1. 11.
반응형

문제

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

 

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

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

programmers.co.kr

 

아이디 값을 key로 HashMap을 사용해 아이디와 닉네임을 관리한다.

 

나는 LinkedList로 했는데 ArrayList든 뭐든 인덱스 없이 저장할 수 있는 자료구조를 이용해

들어오고, 나오고를 저장할 result를 만들어준다.

 

  • Enter라면 아이디와 닉네임을 저장하고 result에 add
  • Change라면 단순히 닉네임만 업데이트
  • Exit이라면 result에만 add

record의 모든 데이터를 확인한 후에는

result의 size만큼 돌며 누가 들어오고 나갔는지 결과를 출력하면 완성이다!

전체 코드

import java.util.*;

public class Solution{
    public String[] solution(String[] record) {
        Map<String, String> idMap = new HashMap<>();
        List<String[]> result = new LinkedList<>();
 
        for (String records : record) {
            String[] keyWord = records.split(" ");
            
            if (keyWord[0].equals("Enter")) { // 들어오면 id 맵에 저장후, result에 추가
                idMap.put(keyWord[1], keyWord[2]);
                result.add(keyWord);
            } else if (keyWord[0].equals("Change")) { // 닉네임 업데이트만
                idMap.put(keyWord[1], keyWord[2]);
            } else { // 나가면 result에만 추가 
                result.add(keyWord);
            }
        }
 
        String[] answer = new String[result.size()];
        int idx = 0;
        for (String[] keyWords : result){
            String nickName = idMap.get(keyWords[1]);
            
            if (keyWords[0].equals("Enter")) { 
                answer[idx++] = nickName + "님이 들어왔습니다.";
            } else {
                answer[idx++] = nickName + "님이 나갔습니다.";
            }
        }
        return answer;
    }
}

GITHUB

github.com/KwonMinha/Programmers/blob/master/2019_Kakao_Blind_Recruitment/src/OpenChatting.java

 

KwonMinha/Programmers

Programmers Algoritm. Contribute to KwonMinha/Programmers development by creating an account on GitHub.

github.com

 

반응형

댓글