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

HeavyJ·2023년 1월 24일
0

프로그래머스

목록 보기
4/7

오픈채팅방

문제풀이

이 문제는 해시맵을 사용하는 문제다.
총 3가지 경우를 생각하면 된다.
채팅방에 들어오는 경우, 나가는 경우, 닉네임을 변경하는 경우
채팅방에 들어오는 경우에 해당 uid와 닉네임을 해시맵에 저장, 그리고 닉네임을 변경하는 경우 uid와 해시맵에 닉네임을 저장한다. 같은 uid로 다른 닉네임을 해시맵에 저장하면 가장 나중에 저장된 닉네임이 저장된다.

그리고 List를 생성해준뒤 채팅방에 들어오는 경우와 나가는 경우 해시맵에 저장한 닉네임을 가져와서 출력문을 저장해주면 답을 해결할 수 있다.

몇 개의 요소가 생길지 모르므로 배열보다는 List에 출력문을 저장하고 list.stream().toArray(String[]::new) 를 이용하여 배열로 다시 변환해주면 된다.

구현코드

import java.util.*;
class Solution {
    public String[] solution(String[] record) {
        String[] answer = {};
        List<String> answerList = new ArrayList<>();

        // 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다
        // 채팅방에서 닉네임을 변경하는 방법
        // 채팅방 나간 후, 새 닉네임으로 다시 들어간다
        // 채팅방에서 닉네임을 변경한다

        HashMap<String, String> hm = new HashMap<>();

        for(int i = 0; i<record.length; i++){
            String[] strArr = record[i].split(" ");

            if(strArr[0].equals("Enter")){
                hm.put(strArr[1],strArr[2]);
            }
            else if(strArr[0].equals("Change")){
                hm.put(strArr[1],strArr[2]);
            }
        }

        for(int i =0; i<record.length; i++){
            String[] strArr = record[i].split(" ");

            if(strArr[0].equals("Enter")){
                answerList.add(hm.get(strArr[1])+"님이 들어왔습니다.");
            }
            else if(strArr[0].equals("Leave")){
                answerList.add(hm.get(strArr[1])+"님이 나갔습니다.");
            }
        }

        answer = answerList.stream().toArray(String[]::new);
        return answer;
    }
}

해시맵을 연습하기 좋은 문제인 것 같다.

profile
There are no two words in the English language more harmful than “good job”.

0개의 댓글