본문 바로가기

PS

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

1) 문제 접근 방법

- Enter, Leave일 때만, result에 포함되면 됩니다.

- Enter, Change 로 입력될 때, HashMap에 저장해서 관리합니다. 

-> 또한, Enter혹은 Change를 통해서 닉네임이 변경되면, HashMap에 반영하였습니다. 

- String을 쪼갤 때는 split을 사용합니다. 

- ArrayList arr에는 Enter, Leave일 때의 id를 저장합니다.

-> 이것을 저장하는 이유는, 나중에 Result에 String으로 만들 값을 넣기 위해서입니다. 

- 최종적으로 arr을 순회하면서, 해당 id에 맞는 Nickname을 HashMap에서 찾아서, 

  결과 String을 만들어서 result에 추가합니다. 

 

import java.util.*; 

// id와 action(Enter, Leave)를 Pair로 만들어서
// arr에 관리합니다. 
class Pair{
    String id;
    String action;
    
    public Pair(String id, String action){
        this.id = id;
        this.action = action; 
    }
}

class Solution {
    public ArrayList<String> solution(String[] record) {
        ArrayList<String> answer = new ArrayList<>();
        ArrayList<Pair> arr = new ArrayList<>(); 
        HashMap<String, String> map = new HashMap<>();
        
        // record를 순회하면서, 
        // Enter 혹은 Change일때, HashMap에 id, nickname을 
        // 추가 혹은 업데이트 합니다. 
        // 이렇게 하면 최종적으로 최신의 id, nickname만 HashMap에 저장됩니다. 
        for(int i=0; i<record.length; i++){
            String[] info = record[i].split(" ");
            if(info.length == 3){
                String id = info[1];
                String name = info[2];
                map.put(id, name);
            }
        }
        
        // record를 순회하면서, Enter일 때와 Leave일 때, 
        // id, 그리고 action(Enter or Leave)를 arr에 저장합니다. 
        for(int i=0; i<record.length; i++){
            String[] info = record[i].split(" ");
            if(info[0].equals("Enter")){
                arr.add(new Pair(info[1], info[0]));
            }else if(info[0].equals("Leave")){
                arr.add(new Pair(info[1], info[0]));
            }
        }
        
        // arr을 순회하면서, 
        // Enter일 때, Leave일 때를 각각 String을 만들어서
        // 결과에 넣어줍니다. 
        for(int i=0; i<arr.size(); i++){
            Pair curr = arr.get(i);
            
            if(curr.action.equals("Enter")){
                String name = map.get(curr.id);
                answer.add(name +"님이 들어왔습니다.");
            }else if(curr.action.equals("Leave")){
                String name = map.get(curr.id);
                answer.add(name +"님이 나갔습니다.");
            }
        }
        
        
        return answer;
    }
}

'PS' 카테고리의 다른 글

다트 게임 [프로그래머스]  (1) 2023.06.03
실패율 [프로그래머스]  (0) 2023.06.03
알파벳 [BOJ 1987]  (0) 2022.10.10
테트로미노 [BOJ 14500]  (0) 2022.10.08
트리의 부모 찾기 [BOJ 11725]  (0) 2022.10.06