문제접근 ❓
- HashMap<Key, Value>
오답노트 ❓
오답 코드
import java.util.*; class Solution { List<String> answers; // 채팅방 입/퇴장 기록 리스트 Map<String, String> idMap; // 채팅방에 접속한 이력이 있는 아이디 map final String COME_IN = "님이 들어왔습니다."; final String GO_OUT = "님이 나갔습니다."; public String[] solution(String[] record) { String[] answer = {}; answers = new ArrayList<>(); idMap = new HashMap<>(); for (String s : record) { String[] arr = s.split(" "); // arr[0] : 명령어, arr[1] : id, arr[2] : 닉네임 if ("Leave".equals(arr[0])) { // Leave 명령어일 경우 arr[1] : id answers.add(idMap.get(arr[1]) + GO_OUT); } else { if (idMap.containsKey(arr[1])) { // 채팅방에 접속한 이력이 남아있는 아이디라면 updateRecord(arr[0], arr[1], arr[2]); // 업데이트를 하자! } else { // 새로운 유저가 Enter 로 입장한 경우 answers.add(arr[2] + COME_IN); idMap.put(arr[1], arr[2]); } } } answer = new String[answers.size()]; answers.toArray(answer); return answer; } public void updateRecord(String cmd, String id, String newName) { if ("Enter".equals(cmd)) { // 기존의 유저가 닉네임을 변경하고 들어온 경우 answers.add(newName + COME_IN); } String originName = idMap.get(id); // 해당 id의 기존 닉네임 idMap.put(id, newName); // 바꾸고자 하는 닉네임은 newName for (int i = 0; i < answers.size(); i++) { String a = answers.get(i); String s = a.substring(0, a.indexOf("님")); if (s.equals(originName)) { answers.add(i, a.replace(originName, newName)); } } } }
틀린 이유
Solution
import java.util.*;
class Solution {
Map<String, String> idMap; // 채팅방에 접속한 이력이 있는 아이디 map
final String COME_IN = "님이 들어왔습니다.";
final String GO_OUT = "님이 나갔습니다.";
public String[] solution(String[] record) {
String[] answer = {};
idMap = new HashMap<>();
int cnt = 0;
for (String s : record) {
String[] arr = s.split(" ");
if ("Leave".equals(arr[0])) { // 채팅방에서 나가는건 닉네임 변화가 없다.
continue;
} else if ("Change".equals(arr[0])) {
cnt++;
}
idMap.put(arr[1], arr[2]); // Map 에다가 id 에 해당하는 nickname을 계속해서 update
}
answer = new String[record.length - cnt];
int idx = 0;
// 채팅방 입/퇴장에 대해서만 현재 map에 기록된 nickname을 바탕으로 문구를 기록하면 끝!
for (String s : record) {
String[] arr = s.split(" ");
if ("Enter".equals(arr[0]))
answer[idx++] = idMap.get(arr[1]) + COME_IN;
else if ("Leave".equals(arr[0]))
answer[idx++] = idMap.get(arr[1]) + GO_OUT;
}
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 베스트앨범 (LEVEL 3) (0) | 2022.02.08 |
---|---|
[프로그래머스] 입국심사(LEVEL 3) (0) | 2022.01.09 |