2026.06.27

문제 풀이

나의 코드

소요 시간: 34분

시간 복잡도: O(n)O(n)


mapuid와 실제 이름을 저장하고,
accessEnter, 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]);
    }
}

AI 코드

시간 복잡도: O(n)O(n)


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]);
    }
}

0개의 댓글