728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/42888?language=java
이 문제의 핵심은 "최종적으로 관리자에게 보여지는 닉네임의 출입 상태"를 리턴하면 되는 것.
아이디에 따라 닉네임이 변화되는 모습을 보면
(1) "Enter uid1234 Muzi"
uid1234 : Muzi
(2) "Enter uid4567 Prodo"
uid1234 : Muzi
uid4567 : Prodo
(3) "Leave uid1234"
uid1234 : Muzi
uid4567 : Prodo
(4) "Enter uid1234 Prodo"
uid1234 : Prodo
uid4567 : Prodo
(5) "Change uid4567 Ryan"
uid1234 : Prodo
uid4567 : Ryan
결론적으로 uid1234는 Prodo이고, uid4567은 Ryan이다.
나는 이 문제를 풀기 위해서 Map을 사용하였다.
Key를 ID(uid)로 주었고, ID는 변하지 않은 채로 값이 바뀔 수 있기 때문이다.
닉네임이 변하는 경우는
(1) 같은 아이디로 재접속 시
(2) 닉네임을 Change 명령어를 이용하여 변경 시
그렇기 때문에, Leave 명령어만 예외처리를 하여 처리하면 된다.
그리고 리턴할 문자열 배열을 위해 list.toArray(new String[list.size()]);
를 사용하여 별도의 문자열 배열을 생성하지 않고도 리턴할 수 있었다.
package implementation.openChatting;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class OpenChatting {
public static void main(String[] args) {
String[] record = {"Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"};
Solution s = new Solution();
System.out.println(Arrays.toString(s.solution(record)));
}
}
class Solution {
Map<String, String> map = new HashMap<String, String>();
public String[] solution(String[] record) {
List<String> command = new ArrayList<String>();
List<String> idList = new ArrayList<String>();
List<String> rtnList = new ArrayList<String>();
for (int i = 0; i < record.length; i++) {
String[] arr = record[i].split(" ");
command.add(arr[0]);
idList.add(arr[1]);
if(!"Leave".equals(arr[0])) map.put(arr[1], arr[2]);
}
for (int i = 0; i < command.size(); i++) {
String name = map.get(idList.get(i));
String cmd = command.get(i);
switch(cmd) {
case "Enter" :
rtnList.add(name + "님이 들어왔습니다.");
break;
case "Leave" :
rtnList.add(name + "님이 나갔습니다.");
break;
}
}
return rtnList.toArray(new String[rtnList.size()]);
}
}
728x90
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Oracle] 우유와 요거트가 담긴 장바구니 (0) | 2022.08.07 |
---|---|
[프로그래머스/java] 방금그곡 - 2018 KAKAO BLIND RECRUITMENT (0) | 2022.04.05 |
[프로그래머스/sql] 헤비 유저가 소유한 장소 - ORACLE 셀프조인 (0) | 2022.04.01 |
[프로그래머스/java] 모음사전 - 재귀를 이용하여 푸는 문제 (0) | 2022.04.01 |
[프로그래머스/java] 2 x n 타일링 - DP (0) | 2022.03.13 |
댓글