문제
https://programmers.co.kr/learn/courses/30/lessons/42888
내 답안
import java.util.*;
public class Solution{
public String[] solution(String[] record) {
// Key:Id, value:닉네임 넣을 ID map 선언
Map<String, String> ID = new HashMap<>();
// 기록을 남길 result 선언
List<String[]> result = new LinkedList<>();
for (String records : record) {
// records의 각 단어는 공백으로 구분되어 있으므로
// 잘라서 temp 배열에 차례로 넣음
String[] temp = records.split(" ");
// 입장했을 때
if (temp[0].equals("Enter")) {
// ID 맵에 차례로 아이디, 닉네임 넣기
ID.put(temp[1], temp[2]);
// 입장한 기록 추가
result.add(temp);
// 닉네임을 변경했을 때
} else if (temp[0].equals("Change")) {
// ID 맵에 차례로 아이디, (변경된) 닉네임 넣기
ID.replace(temp[1], temp[2]);
// 퇴장했을 때
} else {
// 퇴장한 기록 추가
result.add(temp);
}
}
// 출입 내역이 단어 형식으로 저장된 result 배열을
// 닉네임+문장 으로 수정
String[] answer = new String[result.size()];
int idx = 0;
for (String[] keyWords : result){
// ID 맵에서 id(key)에 대응되는 닉네임(value) 반환하여 nickName 변수에 저장
String nickName = ID.get(keyWords[1]);
if (keyWords[0].equals("Enter")) {
answer[idx++] = nickName + "님이 들어왔습니다.";
} else {
answer[idx++] = nickName + "님이 나갔습니다.";
}
}
return answer;
}
}
채팅방 출입 기록을 남길 리스트 result와
ID,닉네임을 저장할 Map을 선언한다.
(key-id / value-닉네임)
레코드를 돌며 각각 Enter, Leave,Change의 명령어가 들어옴에따라,
채팅방 출입 기록과 ID에 따른 value(닉네임)를 저장한다.
record의 모든 데이터를 확인한 후에는
result의 size만큼 돌며
id(key)에 대응하는 닉네임(value)를 반환하여 누가 들어오고 나갔는지 결과를 출력하면 완성이다
'문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 문자열 압축(java) (0) | 2021.12.16 |
---|---|
[프로그래머스] 소수 만들기(java) (0) | 2021.12.14 |
[프로그래머스] 음양 더하기(java) (0) | 2021.12.14 |
[프로그래머스] 없는 숫자 더하기(java) (0) | 2021.12.13 |
[프로그래머스] 크레인 인형뽑기(java) (0) | 2021.12.13 |
댓글