본문 바로가기

PS/프로그래머스

프로그래머스 2019 KAKAO BLIND RECRUITMENT - 오픈채팅방[JAVA]

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42888

 

프로그래머스

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

programmers.co.kr

코드:

 

import java.util.*;
class Log{
    String uid;
    boolean login;

    public Log(String uid, boolean login) {
        this.uid = uid;
        this.login = login;
    }
}

/**
 * 문제 정의:
 * 이름을 변경하면 이전 로그도 모두 변경된다.
 * 최종적으로 보여질 로그를 출력해야 한다.
 *
 * userInfo -> map ∵ uid으로 name을 검색하기 위해
 * logList -> list ∵ 방에 나가고 들어오는 log를 순서대로 저장하기 위해
 * 처음에 순서가 보장되는 LinkeHashMap에 저장하려고 했는데 map은 key로 조회하는게 근본적인 존재이유이다.
 * 순서가 보장되는 건 플러스 기능이다.
 */

class Solution {
    public String[] solution(String[] record) {
        HashMap<String, String> userInfo = new HashMap<>(); // {uid, name}
        ArrayList<Log> logList = new ArrayList<>();
        for (int i = 0; i < record.length; i++) {
            String[] split = record[i].split(" ");
            String commend = split[0];
            String uid = split[1];
            if (commend.equals("Enter")) {
                String name = split[2];
                userInfo.put(uid, name);
                logList.add(new Log(uid, true));
            } else if (commend.equals("Leave")) {
                logList.add(new Log(uid, false));
            } else if (commend.equals("Change")) {
                String name = split[2];
                userInfo.put(uid, name);
            }
        }
        String[] answer = new String[logList.size()];
        int i = 0;
        for (Log log : logList) { //마지막에 uid에 따른 name 출력
            String msg = createMsg(userInfo.get(log.uid), log.login);
            answer[i++] = msg;
        }
        return answer;
    }

    public String createMsg(String name, boolean login) {
        StringBuilder sb = new StringBuilder();
        sb.append(name).append("님이 ");
        if (login) {
            sb.append("들어왔습니다.");
        }else{
            sb.append("나갔습니다.");
        }
        return sb.toString();
    }
}