https://programmers.co.kr/learn/courses/30/lessons/42888
코딩테스트 연습 - 오픈채팅방
오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오
programmers.co.kr
주어진 조건에 따라 동작하는 프로그램을 구현하는 문제입니다.
채팅방의 입장,퇴장에 따른 출력은 그대로 구현하면 되지만 uid와 달리 nickname은 변할 수 있으므로 uid를 기준으로 최종 상태의 nickname을 찾고 방의 기록을 다시 한 번 순회하면서 return할 String 배열을 만들었습니다.
Case문을 이용하여 입력된 기록을 입장,퇴장,이름변경으로 구분해 필요한 작동이 이루어지게하고
최종상태의 nickname은 HashMap을 활용해서, uid를 Key로 하고 각 uid마다 부여한 index를 Value로 정해주고 이 값을 String을 담은 ArrayList의 index와 맞춰서 갱신하는 식으로 구현했습니다.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
public class q42888_Programmers_오픈채팅방 {
public static void main(String[] args) {
String[] record = { "Enter uid1234 Muzi", "Enter uid4567 Prodo", "Leave uid1234", "Enter uid1234 Prodo",
"Change uid4567 Ryan" };
System.out.println(Arrays.toString(solution(record)));
}
private static String[] solution(String[] record) {
Map<String, Integer> userMap = new HashMap<String, Integer>();
ArrayList<String> userNick = new ArrayList<String>();
int[][] log = new int[record.length][2];
int index = 0;
int count = 0;
for (int i = 0; i < record.length; i++) {
StringTokenizer st = new StringTokenizer(record[i]);
String act = st.nextToken();
switch (act) {
case "Enter":
String id1 = st.nextToken();
if (!userMap.containsKey(id1)) {
userMap.put(id1, index);
log[i][0] = index;
userNick.add(st.nextToken());
index++;
} else {
userNick.set(userMap.get(id1), st.nextToken());
log[i][0] = userMap.get(id1);
}
log[i][1] = 1;
count++;
break;
case "Leave":
String id2 = st.nextToken();
log[i][0] = userMap.get(id2);
log[i][1] = 2;
count++;
break;
case "Change":
String id3 = st.nextToken();
userNick.set(userMap.get(id3), st.nextToken());
break;
default:
break;
}
}
String[] answer = new String[count];
index = 0;
for (int i = 0; i < log.length; i++) {
if (log[i][1] == 1) {
answer[index++] = new StringBuilder().append(userNick.get(log[i][0])).append("님이 들어왔습니다.").toString();
}else if(log[i][1] == 2){
answer[index++] = new StringBuilder().append(userNick.get(log[i][0])).append("님이 나갔습니다.").toString();
}
}
return answer;
}
}
728x90
'🔍 알고리즘 > 프로그래머스 Java' 카테고리의 다른 글
[Java] 백준 23559번. 밥 (실버1) (0) | 2022.06.29 |
---|---|
[Java] 프로그래머스 64064.불량사용자 (Lv.3) (0) | 2022.06.17 |
[Java] 프로그래머스 60057.문자열압축 (Lv.2) (0) | 2022.06.03 |
[JAVA] 프로그래머스 77484.로또의 최고 순위와 최저 순위 (Lv.1) (0) | 2022.05.26 |
[JAVA] 프로그래머스 92334.신고 결과 받기 (Lv.1) (0) | 2022.05.24 |