티스토리 뷰

반응형

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

 

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

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

programmers.co.kr

문제 접근 방법

해당 문제는 전형적인 해쉬 문제 입니다.

들어온 정보에 대해서 미리 해쉬로 저장하고 나서 값을 뿌려줄 때 해당 값을 뿌려주면 됩니다.

 

import java.util.HashMap;
import java.util.Map;
class Solution {
    public String[] solution(String[] record) {
        Participants participants = new Participants(record);
        return participants.hashingUsers().returnAnswer();
    }
    public static class Participants {
        private final String[] records;
        private final String[] information;
        private int size;
        private final Map<String,String> users;
        private static final String IN = "님이 들어왔습니다.";
        private static final String OUT = "님이 나갔습니다.";

        public Participants(String[] records) {
            this.records = records;
            users = new HashMap<>();
            information = new String[this.records.length];
        }

        public Participants hashingUsers() {
            int i =0;
            for(String sentence : records){
                String[] parts = sentence.split(" ");
                if (parts[0].equals("Enter") || parts[0].equals("Leave")){
                    information[i++] = parts[0]+" "+parts[1];
                }
                if (parts[0].equals("Enter") || parts[0].equals("Change")){
                    users.put(parts[1],parts[2]);
                }
            }
            size = i;
            return this;
        }
        public String[] returnAnswer() {
            String[] res = new String[size];
            int i = 0;
            for(int cur =0; cur<size; cur++) {
                String[] parts = information[cur].split(" ");
                if(parts[0].equals("Enter")) {
                    res[i] = users.get(parts[1])+IN;
                }else{
                    res[i] = users.get(parts[1])+OUT;
                }
                i++;
            }
            return res;
        }
    }
}

hashingUsers

Enter와 Leave에 대해서는 information 배열에 저장하고, Enter와 Change에 대해서는 user의 아이디 값과 이름에 대해서 추가 또는 업데이트를 진행한다.

 

resultAnswer

Enter와 Leave에 대한 값 기준으로 아이디 대신 이름으로 Enter와 Leave는 각 맞는 한국어로 바꿔주는 역할을 한다.

 

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함