본문 바로가기

알고리즘(자바)

[프로그래머스] (2018년)KAKAO BLIND RECRUITMENT 오픈채팅방

 

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

 

코딩테스트 연습 - 오픈채팅방 | 프로그래머스

오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오픈 채팅방을 개설한 사람을 위해, 다양한 사람들이 들어오고, 나가는 것을 지켜볼 수 있는 관리자창을 만들기로 했다. 채팅방에 누군가 들어오면 다음 메시지가 출력된다. [닉네임]님이 들어왔습니다. 채팅방에서 누군가 나가면 다음 메시지가 출력된다. [닉네임]님이 나갔습니다. 채팅

programmers.co.kr

 

해시 알고리즘을 이용해 풀면 쉽게 풀리는 것 같다.

 

주어진 입력 record를 하나씩 읽으면서 

첫번째 명령어 Enter, Leave, Change를 기준으로 " "가 있으므로 split해서 String 배열에 저장후 

 

Enter와 Change에서 id에 해당하는 nickname을 map에 저장하고

Enter와 Leave에서는 id와 들어왔습니다, 나갔습니다 msg를 저장한다.

 

그리고 저장된 msg를 읽으면서 id를 최종 nickname으로 바꾼다.

import java.util.HashMap;
import java.util.Map;
class Solution {
    public static String[] solution(String[] record) {
		HashMap<String, String> map = new HashMap<String, String>();
		String[] msg = new String[record.length];
		
		int n = 0;
		for(String rec : record) {
			String[] str = rec.split(" ");
			
			if(str[0].contentEquals("Enter")) {
				map.put(str[1],  str[2]);
				msg[n++] = str[1]+"님이 들어왔습니다.";
			}
			else if(str[0].equals("Leave")) {
				msg[n++] = str[1] + "님이 나갔습니다.";
			}
			else if(str[0].equals("Change")){
				map.put(str[1],  str[2]);
			}
		}
		String[] answer = new String[n];
		n=0;
		for(String str : msg) {
			if(str == null)
				break;
			String[] id = str.split("님");
			String nickname = map.get(id[0]);
			answer[n++] = nickname + "님" + id[1];
		}
		return answer;
	}
}

 

반응형