문제
https://programmers.co.kr/learn/courses/30/lessons/42888
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| private static final String ENTER = "Enter"; private static final String LEAVE = "Leave"; private static final String CHANGE = "Change";
private static final String MESSAGE_ENTER = "님이 들어왔습니다."; private static final String MESSAGE_LEAVE = "님이 나갔습니다.";
public String[] solution(String[] record) { List<String[]> list = new ArrayList<>(); Map<String, String> nickName = new HashMap<>();
int returnArraySize = 0; for (String s : record) { String[] split = s.split(" "); String[] actionAndUid = new String[3];
actionAndUid[0] = split[0]; actionAndUid[1] = split[1];
if (!CHANGE.equals(split[0])) { list.add(actionAndUid); returnArraySize++; }
if (!LEAVE.equals(split[0])) { nickName.put(split[1], split[2]); } }
String[] answer = new String[returnArraySize]; int i = 0; for (String[] array : list) { switch (array[0]) { case ENTER : answer[i] = nickName.get(array[1]) + MESSAGE_ENTER; break; case LEAVE : answer[i] = nickName.get(array[1]) + MESSAGE_LEAVE; break; }
i++; }
return answer; }
|
흐름
- 문자열을 공백으로 나눠서 행동과 유저의 아이디를 저장하는 배열에 담는다.
- 행동이 Change가 아닌 경우엔 채팅방에 입장했거나 나갓다는 문구룰 출력해야 하기 때문에 List에 담는다.
- 행동이 Leave가 아닌 경우엔 닉네임이 변경되었거나, 새로 방에 들어온 것이므로 유저 아이디를 key로하는 map에 value로 닉네임을 저장한다.
- 모두 저장했으면 List만큼 돌면서 해당 행동에 맞는 문자열을 만들어 저장한다.
- 끝
결과
번호 |
속도 |
테스트 1 |
통과 (18.70ms, 54.1MB) |
테스트 2 |
통과 (17.35ms, 52.4MB) |
테스트 3 |
통과 (17.84ms, 54.4MB) |
테스트 4 |
통과 (19.81ms, 54MB) |
테스트 5 |
통과 (27.75ms, 56.1MB) |
테스트 6 |
통과 (30.38ms, 56.1MB) |
테스트 7 |
통과 (35.26ms, 54.4MB) |
테스트 8 |
통과 (27.59ms, 55.2MB) |
테스트 9 |
통과 (30.72ms, 56.5MB) |
테스트 10 |
통과 (28.67ms, 56.1MB) |
테스트 11 |
통과 (25.16ms, 56.2MB) |
테스트 12 |
통과 (26.04ms, 56.6MB) |
테스트 13 |
통과 (26.07ms, 55MB) |
테스트 14 |
통과 (43.84ms, 57.2MB) |
테스트 15 |
통과 (20.35ms, 52.4MB) |
테스트 16 |
통과 (18.03ms, 52.8MB) |
테스트 17 |
통과 (19.77ms, 54.2MB) |
테스트 18 |
통과 (18.86ms, 52.5MB) |
테스트 19 |
통과 (35.94ms, 56.7MB) |
테스트 20 |
통과 (26.22ms, 55.5MB) |
테스트 21 |
통과 (30.18ms, 56.5MB) |
테스트 22 |
통과 (28.53ms, 52.5MB) |
테스트 23 |
통과 (29.40ms, 57.5MB) |
테스트 24 |
통과 (37.73ms, 57.3MB) |
테스트 25 |
통과 (262.95ms, 158MB) |
테스트 26 |
통과 (292.57ms, 158MB) |
테스트 27 |
통과 (333.29ms, 169MB) |
테스트 28 |
통과 (324.94ms, 163MB) |
테스트 29 |
통과 (282.87ms, 157MB) |
테스트 30 |
통과 (286.21ms, 153MB) |
테스트 31 |
통과 (225.37ms, 147MB) |
테스트 32 |
통과 (255.96ms, 137MB) |
테스트 케이스
1 2 3
| String[] actual = {"Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"}; String[] expected ={"Prodo님이 들어왔습니다.", "Ryan님이 들어왔습니다.", "Prodo님이 나갔습니다.", "Prodo님이 들어왔습니다."}; assertArrayEquals(expected, test.solution(actual));
|