2026.06.27
map은 uid와 실제 이름을 저장하고,
access는 Enter, Leave, Change등의 상태 정보와 uid를 저장하였음.
access의 상태 정보와 map에 저장된 실제 이름을
uid를 통해 매핑하여 문제를 해결함
import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
class Solution {
public String[] solution(String[] record) {
int len = record.length;
Map<String, String> map = new HashMap<>(); // uid와 이름 저장
List<String[]> access = new ArrayList<>(); // 출입 여부와 uid 저장
for (int i = 0; i < len; i++) {
String info[] = record[i].split(" ");
if (!info[0].equals("Leave")) {
map.put(info[1], info[2]); // uid와 이름 저장
}
access.add(new String[]{info[0], info[1]});
}
List<String> result = new ArrayList<>();
for (int i = 0; i < access.size(); i++) {
if (access.get(i)[0].equals("Change")) {
continue;
}
String name = map.get(access.get(i)[1]); // uid로 이름 찾기
if (access.get(i)[0].equals("Enter")) {
result.add(name + "님이 들어왔습니다.");
}
else {
result.add(name + "님이 나갔습니다.");
}
}
return result.toArray(new String[0]);
}
}
record만 2번 순회하는 방식을 사용하여 access리스트 없이 해결함
import java.util.Map;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.List;
class Solution {
public String[] solution(String[] record) {
Map<String, String> map = new HashMap<>();
List<String> result = new ArrayList<>();
for (String r : record) {
String[] info = r.split(" ");
if (!info[0].equals("Leave")) {
map.put(info[1], info[2]);
}
}
for (String r : record) {
String[] info = r.split(" ");
if (info[0].equals("Enter")) {
result.add(map.get(info[1]) + "님이 들어왔습니다.");
} else if (info[0].equals("Leave")) {
result.add(map.get(info[1]) + "님이 나갔습니다.");
}
}
return result.toArray(new String[0]);
}
}