문제 링크: 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();
}
}
'PS > 프로그래머스' 카테고리의 다른 글
프로그래머스 2019 KAKAO BLIND RECRUITMENT - 길 찾기 게임[JAVA] (0) | 2023.10.28 |
---|---|
프로그래머스 2019 KAKAO BLIND RECRUITMENT - 후보키[JAVA] (0) | 2023.10.27 |
프로그래머스 2019 KAKAO BLIND RECRUITMENT - 실패율[JAVA] (0) | 2023.10.25 |
프로그래머스 2018 KAKAO BLIND RECRUITMENT - 방금그곡[JAVA] (0) | 2023.10.24 |
프로그래머스 2018 KAKAO BLIND RECRUITMENT - 압축[JAVA] (1) | 2023.10.23 |