Algorithm/프로그래머스

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

Carroti 2022. 11. 15. 13:50

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

알고리즘

해시맵

 

풀이

모든 사용자의 마지막 닉네임을 알 수 있어야하므로 해시맵을 이용해 id에 해당하는 마지막 닉네임을 저장한다.

 

record를 두 번 탐색하면서

첫 번째에는 enter, change 명령어가 나왔을 때 변경된 아이디를 저장하고,

두 번째에는 enter, leave 명령어가 나왔을 때 id에 따른 닉네임을 해시맵에서 가져와 정답에 추가한다.

 

코드

import java.util.*;

class Solution {
    public ArrayList<String> solution(String[] record) {
        ArrayList<String> answer = new ArrayList<>();
        Map<String, String> map = new HashMap<>();
        
        for(String r: record) {
            StringTokenizer st = new StringTokenizer(r, " ");
            char c = st.nextToken().charAt(0);
            String id = st.nextToken();
            
            if(c == 'E' || c == 'C')
                map.put(id, st.nextToken());
        }
        
        for(String r: record) {
            StringTokenizer st = new StringTokenizer(r, " ");
            StringBuilder sb = new StringBuilder();
            char c = st.nextToken().charAt(0);
            String id = st.nextToken();
            
            if(c == 'E')
                sb.append(map.get(id)).append("님이 들어왔습니다.");
            else if(c == 'L')
                sb.append(map.get(id)).append("님이 나갔습니다.");
            else
                continue;
            
            answer.add(sb.toString());
        }
        
        return answer;
    }
}