반응형
문제 정보는 아래 링크를 확인해주세요!
[오픈채팅방]
[문제 접근 방법]
- 채팅방의 로그 기록에 대한 record 배열을 분기문 돌린다.
- 분기문마다 채팅방의 상태를 공백을 기준으로 split하고,
- 입장/퇴장/닉네임 변경에 대해서 조건문을 통해 해당 조건에 맞는 데이터 처리를 한다.
- 유의해야할 점은 입장/닉네임 변경의 경우 split을 하면 데이터 길이가 3이지만,
- 퇴장의 경우 닉네임에 대한 데이터가 없으므로 데이터 길이가 2라는 것에 유의해야하고
- 닉네임을 변경하는 경우 채팅방 메세지에 표시되면 안된다는 점에 유의하며 문제를 푼다.
[소스 코드]
package algorithm.programmers;
import java.util.*;
/*
* 2019 카카오 블라인드
* 오픈 채팅방
* */
public class Pro42888 {
//채팅방 상태를 저장할 클래스
private class Room {
String state;
String userId;
public Room(String state, String userId) {
this.state = state;
this.userId = userId;
}
}
public String[] solution(String[] record) {
ArrayList<Room> stateOrder = new ArrayList<>();//채팅방을 입장/퇴장 상태를 저장할 리스트
HashMap<String,String> user = new HashMap<>();//유저의 아이디와 닉네임의 상태를 저장할 맵
for (String str : record) {
String[] arr = str.split(" ");
String state = arr[0];// 입장/퇴장/닉네임 변경에 대한 상태
String id = arr[1];// 아이디
if (arr.length == 3) {// 입장/닉네임 변경을 체크
String name = arr[2];
user.put(id, name);//맵에 아이디에 대한 닉네임을 저장
if ("Change".equals(state)) continue;//닉네임 변경일 경우 리스트에 추가해주지 않고 다음 분기문으로
}
Room r = new Room(state,id);
stateOrder.add(r);// 입장/퇴장 상태를 저장할 리스트에 추가
}
String[] result = new String[stateOrder.size()];
for (int i = 0; i < stateOrder.size(); i++) {
Room room = stateOrder.get(i);
result[i] = roomStateMessage(room,user);//유저 ID에 대한 채팅방의 상태를 메세지로 변환
}
return result;
}
//유저에 대한 채팅방의 상태를 메세지 형태로 변환하기위한 메서드
private String roomStateMessage(Room room,HashMap<String,String> user) {
String state = room.state;//입장 상태
String name = user.get(room.userId);//닉네임
String rtnMessage = "";
switch(state) {
case "Enter" ://입장
rtnMessage = name + "님이 들어왔습니다.";
break;
case "Leave" ://퇴장
rtnMessage = name + "님이 나갔습니다.";
break;
}
return rtnMessage;
}
}
[정확성 테스트]
반응형
LIST
'알고리즘 > 연습문제' 카테고리의 다른 글
2019 카카오 블라인드 코딩테스트 - 후보키 (feat. Java) (0) | 2020.05.15 |
---|---|
2019 카카오 블라인드 코딩테스트 - 실패율 (feat. Java) (0) | 2020.05.15 |
2018 카카오 블라인드 코딩테스트 - [3차] n진수 게임 (feat. Java) (0) | 2020.05.14 |
2018 카카오 블라인드 코딩테스트 - [3차] 압축 (feat. Java) (0) | 2020.05.14 |
2018 카카오 블라인드 코딩테스트 - [3차] 방금그곡 (feat. Java) (0) | 2020.05.14 |