[JAVA/프로그래머스] 2019 KAKAO BLIND RECRUITMENT: 오픈채팅방

👀 문제

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

👊 도전

1. 설계

  1. record를 한 번 읽으면서 HashMap에 유저 아이디와 닉네임을 저장한다.
  2. record를 다시 읽으면서 change가 아니면 result 조건에 맞게 answer에 저장한다.

2. 구현

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
32
33
34
35
36
37
38
import java.util.*;
/**
 *
 * @author HEESOO
 *
 */
class Solution {
    public String[] solution(String[] record) {
		HashMap<String, String> names=new HashMap<>();
		int size=0;
		for(String str:record) {
			String[] array=str.split(" ");
			if(array[0].equals("Enter")) {
				names.put(array[1], array[2]);
				size++;
			}
			else if(array[0].equals("Leave")) {
				size++;
			}
			else if(array[0].equals("Change")){
				names.replace(array[1], array[2]);
			}
		}
		
		String[] answer=new String[size];
		int idx=0;
		for(String str: record) {
			String[] array=str.split(" ");
			if(array[0].equals("Change")) continue;
			else if(array[0].equals("Enter")) 
				answer[idx++]=names.get(array[1])+"님이 들어왔습니다.";			
			else if(array[0].equals("Leave")) 
				answer[idx++]=names.get(array[1])+"님이 나갔습니다.";
			
		}
		return answer;
	}
}

3. 결과

실행결과 🤟 성공 🤟

4. 설명

  1. HashMap에 유저 아이디와 닉네임을 저장한다
    • HashMap에 저장하면 탐색시간이 빠르고, 중복되는 key는 저장되지 않으므로 해당 문제에 적합하다.
    • “Enter”이면 해당 아이디와 닉네임을 해쉬맵에 저장하고, “Leave”면 패스, “Change”면 아이디에 대한 닉네임을 변경한다.
    • record의 문자열은 띄워쓰기를 기준으로 단어, 아이디, 닉네임이 들어오므로 split(“ “)으로 문자열을 쪼갠 후 사용한다.
  2. 다시 record를 읽으면서 answer에 메시지를 저장한다
    • “Change”일 때에는 메시지가 없으므로 패스한다.
    • “Enter”, “Leave”인 경우에 해쉬맵에서 아이디에 따른 닉네임을 찾아 조건에 맞게 메시지를 answer에 저장한다.

👏 해결 완료!