ALGORITHM/프로그래머스 | 백준 | 삼성 | 카카오

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

SZCODE 2020. 8. 17. 23:44

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

 

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

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

programmers.co.kr

문제풀이 : 
채팅방 메시지는 순서대로 출력되게 하면서, 닉네임은 최종 변경된 닉네임으로 출력되게 합니다. 

HashMap을 이용하여 uid는 key로 닉네임은 value로 줍니다.
record 배열을 띄어쓰기로 구분하여 잘라준 후 HashMap에 저장해 줍니다. 같은 uid(key)가 있을 경우 해쉬맵에는 최종 변경된 닉네임으로 저장됩니다.

String은 equals로 문자열이 같은지 비교할 때 사용한다.
변수를 따로 주어 사용해서 가독성을 좋게하자.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;

class Solution {
	public static String[] solution(String[] record) {
		ArrayList<String> list = new ArrayList();
		HashMap<String, String> hm = new HashMap();
		
		String message,uid,nickname;
		
		for (int i = 0; i < record.length; i++) {
			 message = record[i].split(" ")[0];
			 uid =  record[i].split(" ")[1];
			
			if(message.equals("Enter") || message.equals("Change")) {
				 nickname = record[i].split(" ")[2];
					hm.put(uid,nickname);
			}

		for (int i = 0; i < record.length; i++) {
			 message = record[i].split(" ")[0];
			 uid =  record[i].split(" ")[1];
			 
			if (message.equals("Enter")) {
				if (hm.containsKey(uid)) {
					list.add(hm.get(uid) + "님이 들어왔습니다.");
				}

			} else if (message.equals("Leave")) {
				if (hm.containsKey(uid)) {
					list.add(hm.get(uid) + "님이 나갔습니다.");
				}
			}
		}

		String[] answer = new String[list.size()];
		for (int i = 0; i < answer.length; i++) {
			answer[i] = list.get(i);
		}

		return answer;
	}

}