https://programmers.co.kr/learn/courses/30/lessons/42888
해시 알고리즘을 이용해 풀면 쉽게 풀리는 것 같다.
주어진 입력 record를 하나씩 읽으면서
첫번째 명령어 Enter, Leave, Change를 기준으로 " "가 있으므로 split해서 String 배열에 저장후
Enter와 Change에서 id에 해당하는 nickname을 map에 저장하고
Enter와 Leave에서는 id와 들어왔습니다, 나갔습니다 msg를 저장한다.
그리고 저장된 msg를 읽으면서 id를 최종 nickname으로 바꾼다.
import java.util.HashMap;
import java.util.Map;
class Solution {
public static String[] solution(String[] record) {
HashMap<String, String> map = new HashMap<String, String>();
String[] msg = new String[record.length];
int n = 0;
for(String rec : record) {
String[] str = rec.split(" ");
if(str[0].contentEquals("Enter")) {
map.put(str[1], str[2]);
msg[n++] = str[1]+"님이 들어왔습니다.";
}
else if(str[0].equals("Leave")) {
msg[n++] = str[1] + "님이 나갔습니다.";
}
else if(str[0].equals("Change")){
map.put(str[1], str[2]);
}
}
String[] answer = new String[n];
n=0;
for(String str : msg) {
if(str == null)
break;
String[] id = str.split("님");
String nickname = map.get(id[0]);
answer[n++] = nickname + "님" + id[1];
}
return answer;
}
}
반응형
'알고리즘(자바)' 카테고리의 다른 글
[프로그래머스] 해시알고리즘 완주하지 못한 선수 (0) | 2019.09.09 |
---|---|
[백준]BFS 알고리즘 과 토마토 문제 (0) | 2019.09.02 |
순열 Permutation 알고리즘 (0) | 2019.07.18 |
소수 인지 체크하는 함수 와 최대공약수, 최소 공배수 구하기 (0) | 2019.06.19 |
알고리즘 언어 선택 (1) | 2019.05.13 |
알고리즘 (0) | 2019.04.14 |