

내가 작성한 코드
import java.util.*;
class Solution {
public String[] solution(String[] record) {
Map<String, String> uidMap = new HashMap<>(); // uid, name
int length = 0; // 정답 배열 길이용 변수
// uid당 닉네임 매핑 >> change 덮어 씌우기
for(String r : record) {
String[] arr = r.split(" ");
// 정답배열에 담아야함 >> length 증가
if(arr[0].equals("Enter") || arr[0].equals("Leave")) length++;
// Leave는 Map 변동사항 없음 >> 건너띄기
if(arr[0].equals("Leave")) continue;
uidMap.put(arr[1], arr[2]); // Enter, Change >> Map에 저장
}
String[] answer = new String[length];
int idx = 0;
// Enter, Leave를 담아서 정답배열에 저장
for(String r : record) {
String[] arr = r.split(" ");
if(arr[0].equals("Enter")) {
String name = uidMap.get(arr[1]);
answer[idx++] = name + "님이 들어왔습니다.";
}
if(arr[0].equals("Leave")) {
String name = uidMap.get(arr[1]);
answer[idx++] = name + "님이 나갔습니다.";
}
}
return answer;
}
}
다른 사람의 코드
import java.util.*;
class Solution {
// 정답에 담을 문자열
private static final String ENTER_FORMAT = "%s님이 들어왔습니다.";
private static final String LEAVE_FORMAT = "%s님이 나갔습니다.";
private HashMap<String, UserInfo> userMap = new HashMap<>();
// 유저 정보 클래스
private class UserInfo {
public String userId;
public String nickName;
public UserInfo(String userId, String nickName) {
this.userId = userId;
this.nickName = nickName;
}
}
// 유저 컨트롤 클래스
private class Command {
public char command;
public String userId;
public Command(char command, String userName) {
this.command = command;
this.userId = userName;
}
}
public String[] solution(String[] records) {
ArrayList<Command> commandList = new ArrayList<>();
for (String record : records) {
String[] split = record.split(" ");
String command = split[0];
String userId = split[1];
String nickName = null;
// 각 커맨드 별로 처리
switch(command.charAt(0)) {
case 'E': // Enter
nickName = split[2];
if(userMap.containsKey(userId) == false) { // Map에 없으면 저장
userMap.put(userId, new UserInfo(userId, nickName));
} else { // 이미 있으면 갱신
userMap.get(userId).nickName = nickName;
}
commandList.add(new Command(command.charAt(0), userId)); // 커맨드 리스트에 저장
break;
case 'L': // Leave
commandList.add(new Command(command.charAt(0), userId)); // 커맨드 리스트에 저장
break;
case 'C': // Change
nickName = split[2];
userMap.get(userId).nickName = nickName; // Map에 갱신
break;
}
}
// %s자리 채워 넣으며 배열로 전환
return commandList.stream()
.map(cmd -> String.format( cmd.command == 'E' ? ENTER_FORMAT : LEAVE_FORMAT , userMap.get(cmd.userId).nickName))
.toArray(ary -> new String[commandList.size()]);
}
}
- 객체화
Share article