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

박현우·2020년 9월 26일
0

프로그래머스

목록 보기
13/34

문제

오픈채팅방

문제 풀이

처음엔 유저 아이디와 닉네임을 담고 있는 Class를 만들어서 닉네임이 바뀌었을 경우 유저아이디를 찾아 닉네임을 바꿔주는 방식으로 코드를 짰는데, 테스트케이스를 죄다 틀리고 시간도 많이 경과 했기 때문에 다른 사람 풀이를 봤다.
거의 모든 사람이 해시를 이용해서 풀었다. 아예 해시를 생각도 안하고 있어서 큰 충격을 받았다. 아직 많이 문제를 풀어야 할 것 같다. 풀이방식은 다음과 같다.

  1. 들어왔을 경우 혹은 나갔을 경우에 메시지를 출력하니까 메시지를 담을 자료구조(ex. 배열)에 메시지를 담는다.
    단, 닉네임이 아닌 유저아이디로 저장해야 나중에 key-value를 거꾸로 뒤집을 수 있다.
  1. uid와 name을 key-value로 항상 최신화 시켜준다.
  1. 마지막에 메시지를 담은 자료구조에 uid마다 가장 최근에 바뀐 닉네임으로 변경 해준다.

프로그램 코드

import java.util.*;
class Solution {
    public String[] solution(String[] record) {
        ArrayList<String> arr = new ArrayList();
		HashMap<String, String> map = new HashMap();
		for (int i = 0; i < record.length; i++) {
			String[] command = record[i].split(" ");

			if (command[0].equals("Enter")) {
				arr.add(command[1] + "님이 들어왔습니다.");
				map.put(command[1], command[2]);
			} else if (command[0].equals("Change")) {
				map.put(command[1], command[2]);
			} else {
				arr.add(command[1] + "님이 나갔습니다.");
			}
		}
		String[] answer = new String[arr.size()];
		for (int i = 0; i < arr.size(); i++) {
			int idx = arr.get(i).indexOf("님");
			String id = arr.get(i).substring(0, idx);
			String[] temp = arr.get(i).split(" ");
			answer[i] = map.get(id) + "님이 " + temp[1];
		}
        return answer;
    }
}

0개의 댓글