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 |