이번에 풀어본 문제는
프로그래머스 오픈채팅방 입니다.
import java.util.*;
class Chat
{
String action,uid;
public Chat(String action, String uid)
{
this.action = action;
this.uid = uid;
}
public String print()
{
if(this.action.equals("Enter")) return "들어왔습니다.";
return "나갔습니다.";
}
}
class Solution {
public String[] solution(String[] record) {
String[] answer;
HashMap<String, String> hm = new HashMap<>(); // uid, name정보
ArrayList<Chat> al = new ArrayList<>();
StringTokenizer st;
for(String reco : record)
{
st = new StringTokenizer(reco);
String action = st.nextToken();
String uid = st.nextToken();
if(!action.equals("Leave"))
{
String name = st.nextToken();
hm.put(uid,name);
}
if(!action.equals("Change"))al.add(new Chat(action,uid));
}
answer = new String[al.size()];
int answerIdx = 0;
for(Chat c : al)
{
StringBuilder sb = new StringBuilder();
sb.append(hm.get(c.uid)).append("님이 ").append(c.print());
answer[answerIdx++] = sb.toString();
}
return answer;
}
}
채팅방에서 입장,퇴장을 기록하며 닉네임 변경시 이전 기록에도 반영되게 하는 문제입니다.
유일한 uid값이 존재하므로 해시맵을 활용하여 uid,닉네임 값을 담고있도록 하였고,
최종 출력을 위해 action(Enter , Leave)들을 담기위한 ArrayList를 사용했습니다.
모든 입력을 마치고, ArrayList를 탐색하여 출력하게되면 마지막으로 변경된 닉네임으로 앞서 기록된 모든 액션들을 출력하게됩니다.
어제 레벨3문제를 풀어서그런지 너무 쉽게 풀었네요ㅋㅋㅋㅋ
잠시나마 행복했습니다^~^