나갔다가 다시 들어오거나, 닉네임을 수정하거나 해서 닉네임이 항상 바뀔수 있고 결과는 바뀐 닉네임만 처음부터 마지막 까지 보여줘야 하는 문제입니다.
변하지 않는 유저ID
가 주어집니다. 유저 ID로 자유롭게 바뀔 수 있는 닉네임
을 해시맵
을 이용하여 찾는다면 항상 찾을 수 있을 것 입니다.
변하지 않는 유저ID
를 해시맵의 키로 자유롭게 바뀔 수 있는 닉네임
를 해시맵의 값으로 지정하면 항상 ID -> 닉네임 변환이 가능합니다.
HashMap<String,String> hash = new HashMap<>(); //유저ID, 닉네임으로 해시맵 구성
for(String s : record){ //한 사건당 닉네임 구분을 위해
String[] temp = s.split(" ");
switch(temp[0]){
case "Enter":
case "Change": //입장, 변경
hash.put(temp[1],temp[2]); //id, 닉네임 저장
break;
}
}
문자열에서 split(" ")
시 단어 단위로 나누어 배열에 저장합니다.
temp[0]
: 행동
temp[1]
: id
temp[2]
: 닉네임
입장과 닉네임 변경시에만 해시맵의 닉네임을 입력,수정합니다.
평소와는 다르게 String
의 +
연산이 아닌 StringBuilder
의 append()
메서드를 이용해 보았습니다.
//출력 배열 해시로 id->닉네임
for(String s: record){
String[] temp = s.split(" ");
StringBuilder sb = new StringBuilder();
String id = temp[1]; //ID
sb.append(hash.get(id) + "님이 "); //닉네임
switch(temp[0]){
case "Enter": //입장
sb.append("들어왔습니다.");
answer.add(sb.toString());
break;
case "Leave": //퇴장
sb.append("나갔습니다.");
answer.add(sb.toString());
break;
}
}
닉네임 변경은 출력을 안하므로 입장과 퇴장시에만 결과를 출력합니다.
import java.util.*;
class Solution {
public String[] solution(String[] record) {
HashMap<String,String> hash = new HashMap<>(); //유저ID, 닉네임으로 해시맵 구성
ArrayList answer = new ArrayList<>(); //결과 저장for(String s : record){ //한 사건당 닉네임 구분을 위해 String[] temp = s.split(" "); switch(temp[0]){ case "Enter": case "Change": //입장, 변경 hash.put(temp[1],temp[2]); //id, 닉네임 저장 break; } } //출력 배열 해시로 id->닉네임 for(String s: record){ String[] temp = s.split(" "); StringBuilder sb = new StringBuilder(); String id = temp[1]; //ID sb.append(hash.get(id) + "님이 "); //닉네임 switch(temp[0]){ case "Enter": //입장 sb.append("들어왔습니다."); answer.add(sb.toString()); break; case "Leave": //퇴장 sb.append("나갔습니다."); answer.add(sb.toString()); break; } } return answer.toArray(new String[answer.size()]); //결과출력 }
}
https://github.com/ds02168/Study_Algorithm/commit/e40e17bf98b7cfa27155072c87182f43e2f4ae71