티스토리 뷰
[프로그래머스/자바] 오픈채팅방 풀이 - 2019 KAKAO BLIND RECRUITMENT
hrniin 2022. 11. 24. 18:58https://school.programmers.co.kr/learn/courses/30/lessons/42888
2019 KAKAO BLIND RECRUITMENT Level 2 문제다.
Level 1만큼이나 간단한 문제다.
key로 사용자 아이디가 들어가고, value로 닉네임이 저장되는 해시맵을 통해 풀었다.
채팅방에 들어온 후 닉네임을 한번도 바꾸지 않거나,
채팅방에 들어온 후 닉네임을 바꾸는 사용자가 있을 수 있으므로
주어진 record의 가장 첫 단어가 Enter이거나 Change인 경우에
map에 (아이디, 닉네임)을 넣어준다.
Enter 후 닉네임을 Change 한다면 map의 value가 변경된 닉네임으로 덮어지기 때문에
map의 value는 항상 가장 최신의 닉네임만이 담겨져 있다.
map에 다 담으면
다시 record를 탐색하며 한글 문자열 형태로 배열에 담는다.
이때 Change를 제외한 Enter, Leave인 경우에만 반환할 문자열 배열에 담기기 때문에
map에 담을 때 Change인 경우의 갯수를 세고,
record.length - change 를 해주면 반환할 배열의 크기가 된다.
사용자 아이디로 map에 있는 닉네임을 가져와서
Enter인지 Leave인지에 맞게 단순히 문자열을 구성하면 된다.
문자열을 합칠 때는 Stirng += 보다 StringBuilder가 효율적이기 때문에
StringBuilder로 문자열을 구성하고 배열에 넣어줄 때는 sb.toString() 해주었다.
import java.util.*;
class Solution {
public String[] solution(String[] record) {
StringTokenizer st;
HashMap<String, String> map = new HashMap<>();
int change = 0;
for(String str : record) {
st = new StringTokenizer(str);
String state = st.nextToken();
if(!state.equals("Leave")) {
if(state.equals("Change"))
change++;
String id = st.nextToken();
String nickname = st.nextToken();
map.put(id, nickname);
}
}
String[] ans = new String[record.length - change];
int idx = 0;
for(String str : record) {
st = new StringTokenizer(str);
String state = st.nextToken();
if(state.equals("Change"))
continue;
String id = st.nextToken();
StringBuilder sb = new StringBuilder();
// 가장 마지막으로 변경한 닉네임
sb.append(map.get(id));
if(state.equals("Enter"))
sb.append("님이 들어왔습니다.");
else
sb.append("님이 나갔습니다.");
ans[idx++] = sb.toString();
}
return ans;
}
}
'algorithm > programmers' 카테고리의 다른 글
[프로그래머스/자바] 자물쇠와 열쇠 풀이 - 2020 KAKAO BLIND RECRUITMENT (0) | 2022.11.25 |
---|---|
[프로그래머스/자바] 후보키 풀이 - 2019 KAKAO BLIND RECRUITMENT (0) | 2022.11.24 |
[프로그래머스/자바] 실패율 풀이 - 2019 KAKAO BLIND RECRUITMENT (0) | 2022.11.24 |
[프로그래머스/자바] 블록 이동하기 풀이 - 2020 KAKAO BLIND RECRUITMENT (0) | 2022.11.24 |
[프로그래머스/자바] 외벽 점검 풀이 - 2020 KAKAO BLIND RECRUITMENT (0) | 2022.11.23 |