Java

프로그래머스: 오픈채팅방

Daeryuk Kim 2024. 3. 20. 23:10
import java.util.*;

class Solution {
    public String[] solution(String[] record) {
        List<String[]> actionDetails = new ArrayList<>();
        Map<String, String> uidToNickname = new HashMap<>();
        
        for (String r : record) {
            String[] details = r.split(" ");
            String action = details[0];
            String uid = details[1];
            
            if (!action.equals("Leave")) {
                // Enter 또는 Change인 경우, 최신 닉네임으로 업데이트
                String nickname = details[2];
                uidToNickname.put(uid, nickname);
            }
            
            if (!action.equals("Change")) {
                // Enter 또는 Leave인 경우, 로그를 기록
                actionDetails.add(new String[]{action, uid});
            }
        }

        String[] answer = new String[actionDetails.size()];
        for (int i = 0; i < actionDetails.size(); i++) {
            String[] details = actionDetails.get(i);
            String action = details[0];
            String uid = details[1];
            String nickname = uidToNickname.get(uid);
            
            if (action.equals("Enter")) {
                answer[i] = nickname + "님이 들어왔습니다.";
            } else { // Leave인 경우
                answer[i] = nickname + "님이 나갔습니다.";
            }
        }
        
        return answer;
    }

    public static void main(String[] args) {
        Solution sol = new Solution();
        String[] record = {
            "Enter uid1234 Muzi", 
            "Enter uid4567 Prodo",
            "Leave uid1234",
            "Enter uid1234 Prodo",
            "Change uid4567 Ryan"
        };
        
        String[] result = sol.solution(record);
        System.out.println(Arrays.toString(result));
    }
}


           
            

details[] 배열을 보면 공백을 기준으로 저장된다.

{"Enter", "uid1234", "Muzi"}

{"Enter", "uid4567", "Prodo"}

{"Leave", "uid1234"}

{"Enter", "uid1234", "Prodo"}

{"Change", "uid4567", "Ryan"}

 

1. "Enter uid1234 Muzi", 

action에는 Enter가 담긴다.

uid에는 uid1234가 담긴다.

 

action이 Leave가 아니므로,

nickname에는 Muzi가 담긴다.

해시맵에 "uid1234 " - "Muzi "가 담긴다.

 

action이 Change가 아니므로,

리스트에 Enter, uid1234가 들어간다.

 

해시맵:

" uid1234 " - " Muzi "

리스트:

"Enter, uid1234"

 

2.  "Enter uid4567 Prodo",

action에는 Enter가 담긴다.

uid에는 uid4567 가 담긴다.

 

action이 Leave가 아니므로,

nickname에는 Prodo 가 담긴다.

해시맵에 " uid4567  " - " Prodo  "가 담긴다.

 

action이 Change가 아니므로,

리스트에 Enter, uid4567  가 들어간다.

 

해시맵:

" uid1234 " - " Muzi "

" uid4567  " - " Prodo "

리스트:

"Enter, uid1234"

"Enter, uid4567"

 

3. "Leave uid1234",

action에는 Leave  가 담긴다.

uid에는 uid1234 가 담긴다.

 

action이 Leave가 이므로,

패스.

 

action이 Change가 아니므로,

리스트에 Leave, uid4567  가 들어간다.

 

해시맵:

" uid1234 " - " Muzi "

" uid4567  " - " Prodo "

리스트:

"Enter, uid1234"

"Enter, uid4567"

"Leave, uid1234"


4. "Enter uid1234 Prodo",

action에는 Enter가 담긴다.

uid에는 uid1234  가 담긴다.

 

action이 Leave가 아니므로,

nickname에는 Prodo 가 담긴다.

해시맵에 " uid1234  " - " Prodo  "가 담긴다.

 

action이 Change가 아니므로,

리스트에 Enter, uid1234 가 들어간다.

 

해시맵:

" uid1234 " - " Muzi "

" uid4567  " - " Prodo "

" uid1234  " - " Prodo  "

리스트:

"Enter, uid1234"

"Enter, uid4567"

"Leave, uid1234"

"Enter, uid1234"

 


5. "Change uid4567 Ryan"

action에는 Change  가 담긴다.

uid에는 uid4567 가 담긴다.

 

action이 Leave가 아니므로,

nickname에는 Ryan 가 담긴다.

해시맵에 " uid4567  " - " Prodo  "가 담긴다.

 

action이 Change이므로,

패스.

 

해시맵:

" uid1234 " - " Muzi "

" uid4567  " - " Prodo "

" uid1234  " - " Prodo "

" uid4567  " - " Ryan "

리스트:

"Enter, uid1234"

"Enter, uid4567"

"Leave, uid1234"

"Enter, uid1234"

 

====메시지 붙여서 answer[] 배열에 담기====

i=0)

detail = [ "Enter", "uid1234" ]

action = Enter,

uid = uid1234,

nickname = Prodo 

 

action이 Enter이므로

"Prodo님이 들어왔습니다."

 

i=1)

detail = [ "Enter", "uid4567" ]

action = Enter,

uid = uid4567,

nickname = Ryan

 

action이 Enter이므로

"Ryan님이 들어왔습니다."

 

i=2)

detail = [ "Leave", "uid1234"  ]

action = Leave,

uid = uid4567,

nickname = Prodo 

 

action이 Enter가 아니므로,

"Prodo님이 나갔습니다."

 

i=3)

detail = [ "Enter, uid1234" ]

action = Enter,

uid = uid1234,

nickname = Prodo 

 

action이 Enter이므로

"Prodo님이 들어왔습니다."

 

 

 

 

결과:

[Prodo님이 들어왔습니다.,

Ryan님이 들어왔습니다.,

Prodo님이 나갔습니다.,

Prodo님이 들어왔습니다.]