반응형
12-24 00:25
- Today
- Total
Link
개발하는 고라니
[Programmers] 오픈채팅방 본문
반응형
2019 KAKAO BLIND RECRUITMENT
[Map, Queue 및 구현]
카카오다운 문제인 것 같다. 사용자의 고유 ID를 중심으로 사용자의 닉네임을 매칭해야하기 때문에 ID 값에 따른 닉네임을 수시로 변경할 수 있어야한다. 이에 적합한 컬렉션으로 Map이 있다. Map은 <Key, Value>를 데이터로 저장하는 자료구조이므로 고유한 Key (ID), 그에 따른 Value(name)을 저장하면 되겠다.
나는 각 Record를 처리하며 그의 결과를 Queue에 저장하였다. 그렇게 하면 결과값으로 출력해야할 "...님이 들어왔습니다." 및 "...님이 나갔습니다." 를 순서대로 출력할 수 있기 때문이다. 제출해야 할 답안은 최종적으로 각 ID가 갖는 닉네임으로 저장하여야 하기 때문에 모든 Record를 돌고난 후에 처리했다.
# Code </>
import java.util.*;
class Solution {
static class Data{
String uid;
int sen;
public Data(String uid, int sen){
this.uid = uid;
this.sen = sen;
}
}
static Map<String, String> map = new HashMap<>();
static Queue<Data> Q = new LinkedList<>();
static char[] commands = {'E', 'L', 'C'};
static String[] sentenses = {"님이 들어왔습니다.", "님이 나갔습니다."};
public String[] solution(String[] records) {
for(String record : records){
StringTokenizer st = new StringTokenizer(record);
int cmd = -1;
char initial = st.nextToken().charAt(0);
/* cmd --> 0: Enter, 1: Leave, 2: Change */
for(int i=0; i<3; i++)
if(initial == commands[i])
cmd = i;
String uid = st.nextToken();
String name = null;
/* Leave일 때는 name이 없음 */
if(cmd != 1) {
name = st.nextToken();
if (!map.containsKey(uid))
map.put(uid, name);
else
map.replace(uid, name);
}
System.out.println(cmd + ", " + uid + ", " + name);
switch (cmd){
case 0:
Q.add(new Data(uid, 0)); //(uid, "님이 들어왔습니다.")
break;
case 1:
Q.add(new Data(uid, 1)); //(uid, "님이 나갔습니다.")
break;
}
}
/* Queue의 사이즈 만큼 문장이 실행될 것 */
int n = Q.size();
String[] answer = new String[n];
for(int i=0; i<n; i++){
Data data = Q.poll();
String name = map.get(data.uid);
answer[i] = name + sentenses[data.sen];
}
return answer;
}
}
반응형
'Programming > 프로그래머스' 카테고리의 다른 글
[Programmers] 리틀 프렌즈 사천성 (0) | 2021.05.17 |
---|---|
[Programmers] 카카오프렌즈 컬러링북 (0) | 2021.05.12 |
[Programmers] 짝지어 제거하기 (0) | 2021.05.11 |
[Programmers] 문자열 압축 (0) | 2021.05.11 |
[Programmers] 124 나라의 숫자 (0) | 2021.05.10 |
Comments