본문 바로가기
문제 풀이/프로그래머스

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

by 찐코딩 2021. 12. 26.

문제

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

 

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

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

programmers.co.kr

 

내 답안

import java.util.*;

public class Solution{
    public String[] solution(String[] record) {
        // Key:Id, value:닉네임 넣을 ID map 선언
        Map<String, String> ID = new HashMap<>();
        // 기록을 남길 result 선언
        List<String[]> result = new LinkedList<>();
 
        for (String records : record) {
            // records의 각 단어는 공백으로 구분되어 있으므로
            // 잘라서 temp 배열에 차례로 넣음
            String[] temp = records.split(" ");
            
            // 입장했을 때
            if (temp[0].equals("Enter")) { 
                // ID 맵에 차례로 아이디, 닉네임 넣기
                ID.put(temp[1], temp[2]);
                // 입장한 기록 추가
                result.add(temp);
                
            // 닉네임을 변경했을 때
            } else if (temp[0].equals("Change")) {
                // ID 맵에 차례로 아이디, (변경된) 닉네임 넣기
                ID.replace(temp[1], temp[2]);
               
            // 퇴장했을 때    
            } else {
                // 퇴장한 기록 추가
                result.add(temp);
            }
        }
    
        // 출입 내역이 단어 형식으로 저장된 result 배열을 
        // 닉네임+문장 으로 수정
        String[] answer = new String[result.size()];
        int idx = 0;
        for (String[] keyWords : result){
            // ID 맵에서 id(key)에 대응되는 닉네임(value) 반환하여 nickName 변수에 저장
            String nickName = ID.get(keyWords[1]);
            
            if (keyWords[0].equals("Enter")) { 
                answer[idx++] = nickName + "님이 들어왔습니다.";
            } else {
                answer[idx++] = nickName + "님이 나갔습니다.";
            }
        }
        return answer;
    }
}

채팅방 출입 기록을 남길 리스트 result와

ID,닉네임을 저장할 Map을 선언한다.

(key-id / value-닉네임)

 

레코드를 돌며 각각 Enter, Leave,Change의 명령어가 들어옴에따라,

채팅방 출입 기록과 ID에 따른 value(닉네임)를 저장한다.

 

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

result의 size만큼 돌며

id(key)에 대응하는 닉네임(value)를 반환하여 누가 들어오고 나갔는지 결과를 출력하면 완성이다

댓글