본문 바로가기

카테고리 없음

오픈채팅방

https://school.programmers.co.kr/learn/courses/30/lessons/42888

 

프로그래머스

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

programmers.co.kr

 

두개의 자료구조를 사용했다.

 

입장/퇴장을 누적하는 리스트와,

uid-닉네임을 매칭하는 해시맵 이다.

 

입장/퇴장인 경우(닉네임 변경이 아닌 경우) 해당 정보를 리스트에 누적하고,

입장/닉네임 변경인 경우 해시맵에 담긴 닉네임을 갱신해준다.

 

import java.util.*;
import java.util.stream.*;

class Solution {
    public String[] solution(String[] record) {
        final List<Info> infos = new ArrayList(record.length);
        final Map<String, String> infoMap = new HashMap<>(); 
        
        for(String rec : record) {
            String[] split = rec.split(" ");
            Action action = Action.valueOf(split[0]);
            String uid = split[1];
            
            Info info = new Info(action, uid);
            if (action != Action.Change) {
                infos.add(info);
            }
            
            if (action != Action.Leave) {
                infoMap.put(uid, split[2]);
            }
            
        }
        
        return infos.stream()
            .map(info -> info.toMsg(infoMap.get(info.uid)))
            .toArray(String[]::new);
    }
    
    enum Action {
        Enter, Leave, Change;
    }
    
    static class Info {
        Action action;
        String uid;
        
        public Info(Action action, String uid) {
            this.action = action;
            this.uid = uid;
        }
        
        public String toMsg(String nickname) {
            return nickname + "님이 " + (action == Action.Enter ? "들어왔습니다." : "나갔습니다.");
        }
    }
}