코딩/알고리즘
[알고리즘] 프로그래머스 오픈채팅방 Java(자바)
유어노우
2022. 1. 5. 23:51
- 문제
https://programmers.co.kr/learn/courses/30/lessons/42888
코딩테스트 연습 - 오픈채팅방
오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오
programmers.co.kr
- 코드 설명
record의 최대 길이가 100000(10만)이나 되기때문에 하나하나 다시 바꾸는것은 시간이 많이 걸린다고 생각하여 해시맵을 사용해야 된다고 생각했습니다.
Enter와 Leave일 경우만 answer에 표시되기 때문에 해당 메세지의 상태(Enter or Leave) 와 uid 만 result에 넣어줍니다.
HashMap<uid, username> 이라고 생각하고 Enter와 Change일때만 넣어줍니다.
마지막엔 answer의 크기인 result에 크기만큼 배열을 지정해주고
while문을 통해 정답을 추출합니다.
import java.util.*;
class Solution {
public String[] solution(String[] record) {
String[] answer = {};
HashMap<String,String> user = new HashMap<>();
Queue<Result> result = new LinkedList<>();
for(String msg : record){
String []str = msg.split(" ");
if(str[0].equals("Enter")){
user.put(str[1],str[2]);
result.offer(new Result(str[0],str[1]));
}else if(str[0].equals("Leave")){
result.offer(new Result(str[0],str[1]));
}
else{
user.put(str[1],str[2]);
}
}
answer = new String[result.size()];
for(int i=0; !result.isEmpty() ; i++){
Result rs = result.poll();
if(rs.state.equals("Enter"))
answer[i] = new String(user.get(rs.uid) +"님이 들어왔습니다.");
else
answer[i] = new String(user.get(rs.uid) +"님이 나갔습니다.");
}
return answer;
}
}
class Result{
String uid;
String state;
public Result(String state, String uid){
this.uid = uid;
this.state = state;
}
}
- 결과