300x250
반응형
문제
2019 KAKAO BLIND RECRUITMENT > 오픈채팅방
아이디어
이번 문제의 아이디어는 아이디에 맞는 닉네임 매핑 방법이라고 생각합니다.
그리고 닉네임을 매핑하는 방법은 map을 사용하면 됩니다.
key는 아이디, value는 닉네임으로 한 map을 생성하여 채팅방에 사람들이 들어올 때마다 key-value쌍을 지어 순서대로 모두 넣어주게 되면 결과적으로 마지막에 저장되어 있는 값이 아이디에 해당하는 닉네임이 될 것입니다.
들어오거나 나갈 때 발생되는 로그들은 리스트에 저장해 두고 모든 기록을 훑은 뒤 저장해 둔 로그들을 아이디에 맞는 닉네임을 넣어줘서 결과값에 넣어주면 끝인 문제입니다.
구현 코드 (Java)
import java.util.*;
class Solution {
public String[] solution(String[] record) {
Map<String, String> userInfo = new HashMap<String, String>(); // key: userId, value: userNickname
List<Node> list = new ArrayList<Node>(); // 로그 저장
for(int i=0; i<record.length; i++) {
String str_split[] = record[i].split(" ");
if(str_split[0].equals("Enter")) { // 들어왔을 경우
String userId = str_split[1];
String nickname = str_split[2];
userInfo.put(userId, nickname); // map에 아이디와 닉네임을 매핑하여 저장
list.add(new Node(userId, "님이 들어왔습니다.")); // 들어온 로그 저장
} else if(str_split[0].equals("Leave")) { // 나갈 경우
String userId = str_split[1];
list.add(new Node(userId, "님이 나갔습니다.")); // 나간 로그 저장
} else if(str_split[0].equals("Change")) { // 닉네임 변경할 경우
String userId = str_split[1];
String nickname = str_split[2];
userInfo.put(userId, nickname); // map에 아이디와 닉네임을 새로 매핑
}
}
String res[] = new String[list.size()];
for(int i=0; i<list.size(); i++) {
Node node = list.get(i);
res[i] = userInfo.get(node.userId) + node.comment;
}
return res;
}
private static class Node {
String userId;
String comment;
public Node(String userId, String comment) {
this.userId = userId;
this.comment = comment;
}
}
}
읽어주셔서 감사합니다.
728x90
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 길 찾기 게임 (0) | 2021.04.02 |
---|---|
[Programmers] 후보키 (0) | 2021.03.27 |
[Programmers] 블록 이동하기 (0) | 2021.03.20 |
[Programmers] 자물쇠와 열쇠 (0) | 2021.03.19 |
[Programmers] 괄호 변환 (0) | 2021.03.18 |
댓글