[프로그래머스] 42888. 오픈채팅방

1 분 소요

문제 링크

[프로그래머스] 42888. 오픈채팅방


풀이 과정

HashMap과 ArrayList 자료구조를 이용해 문제를 해결했습니다.

HashMap 에는 각 로그 정보에서 유저 아이디 , 닉네임 을 key-value 쌍으로 저장합니다.

ArrayList 에는 각 로그 정보에서 유저 아이디 와 해당 유저가 들어왔는지(Enter) 혹은 나갔는지(Leave) 의 상태 정보를 저장합니다. 예를 들어, Enter uid1234 Muzi 라는 로그에 대해서 uid1234 , Enter 쌍을 객체 정보로 관리합니다.


if (splited[0].equals("Enter")) {
    map.put(splited[1], splited[2]);
    list.add(new Pair(splited[1], "Enter"));
} else if (splited[0].equals("Leave")) {
    list.add(new Pair(splited[1], "Leave"));
} else if (splited[0].equals("Change")) {
    map.put(splited[1], splited[2]);
}

위 코드는 각 로그들을 순회하며 필요한 정보들을 저장하는 과정입니다.

  • Enter 시에는 맵과 리스트 모두에 정보를 저장합니다. 맵에는 채팅방에 새로 들어온 유저의 유저 아이디닉네임을, 리스트에는 해당 유저가 채팅방을 들어왔다는 기록을 저장합니다.
  • Leave 시에는 리스트에만 추가함으로써, 해당 유저가 채팅방을 나갔다는 기록을 남깁니다.
  • Change 시에는 맵에 해당 키를 새로 추가해 닉네임 변경을 반영시킵니다.


for (Pair pair : list) {
    answer.add(map.get(pair.uid) + "님이 " + (pair.status == "Enter" ? "들어왔습니다." : "나갔습니다."));
}

위 과정을 통해 리스트에 Enter, Leave에 대한 기록이 저장되어 있다면, 이제 맵에서 유저아이디를 검색해 변경된 닉네임을 반영시켜 answer 리스트에 추가해줍니다. 이 때 Pair 객체에 저장되어 있던 유저가 들어왔는지(Enter) 혹은 나갔는지(Leave) 의 상태 정보에 따라 출력 문구를 다르게 해줍니다.


코드

import java.util.*;

public class Main {
    public static List<String> solution(String[] record) {
        List<String> answer = new ArrayList<>();
        Map<String, String> map = new HashMap<>();
        List<Pair> list = new ArrayList<>();

        for (String s : record) {
            String[] splited = s.split(" ");

            if (splited[0].equals("Enter")) {
                map.put(splited[1], splited[2]);
                list.add(new Pair(splited[1], "Enter"));
            } else if (splited[0].equals("Leave")) {
                list.add(new Pair(splited[1], "Leave"));
            } else if (splited[0].equals("Change")) {
                map.put(splited[1], splited[2]);
            }
        }

        for (Pair pair : list) {
            answer.add(map.get(pair.uid) + "님이 " + (pair.status == "Enter" ? "들어왔습니다." : "나갔습니다."));
        }

        return answer;
    }

    private static class Pair {
        String uid;
        String status;

        public Pair(String uid, String status) {
            this.uid = uid;
            this.status = status;
        }
    }

    public static void main(String[] args) {
        solution(new String[]{"Enter uid1234 Muzi", "Enter uid4567 Prodo", "Leave uid1234", "Enter uid1234 Prodo", "Change uid4567 Ryan"});
    }
}

카테고리:

업데이트:

댓글남기기