성능 요약
- 메모리: 155 MB, 시간: 105.47 ms
구분
- 코딩테스트 연습 > 2019 KAKAO BLIND RECRUITMENT
Answer Code1(23.03.26)
import java.util.*;
class Solution {
public String[] solution(String[] record) {
Map<String, String> idMap = new HashMap<>(); // (아이디 - 닉네임) Map
int count = 0; // Change할 때마다 +1 증가
for(int i = 0; i < record.length; i++) {
String [] info = record[i].split(" ");
if(info[0].equals("Leave")) {
continue;
} else if(info[0].equals("Enter")) {
idMap.put(info[1], info[2]);
} else {
idMap.put(info[1], info[2]);
count++;
}
}
String[] answer = new String[record.length - count];
int idx = 0;
for(int i = 0; i < record.length; i++) {
String [] info = record[i].split(" ");
String nickname = idMap.get(info[1]);
if(info[0].equals("Enter")) {
answer[idx++] = nickname + "님이 들어왔습니다.";
} else if(info[0].equals("Leave")) {
answer[idx++] = nickname + "님이 나갔습니다.";
}
}
return answer;
}
}
문제 풀이 - Answer Code1
- 아이디와 닉네임을 Map을 선언하여
idMap
이라는 변수에 저장하고, 닉네임을 변경할 때마다 메시지에서 제외할 count를 증가하는 메서드를 구현한다.
Map<String, String> idMap = new HashMap<>(); // (아이디 - 닉네임) Map
int count = 0; // Change할 때마다 +1 증가
for(int i = 0; i < record.length; i++) {
String [] info = record[i].split(" ");
if(info[0].equals("Leave")) {
continue;
} else if(info[0].equals("Enter")) {
idMap.put(info[1], info[2]);
} else {
idMap.put(info[1], info[2]);
count++;
}
}
-
닉네임에 대한 탐색을 마치고 나서 return하기 위해 메시지에 담을 배열인
answer
선언한다. -
여기서 닉네임 변경한 것에 대해 채팅방 메시지에 표시되지 않으므로 메시지에서 제외할 count 만큼의 크기로 초기화한다.
-
배열의 인덱스를 지정할 변수
idx
도 선언한다.
String[] answer = new String[record.length - count];
int idx = 0;
-
각 값을 공백을 기준으로 split하고, 들어오고 나가는 경우에 대해서만 메시지를 작성하여 저장한다.
-
닉네임은 아이디를 key를 이용하여
idMap
에서 value를 가져와서 사용한다.
for(int i = 0; i < record.length; i++) {
String [] info = record[i].split(" ");
String nickname = idMap.get(info[1]);
if(info[0].equals("Enter")) {
answer[idx++] = nickname + "님이 들어왔습니다.";
} else if(info[0].equals("Leave")) {
answer[idx++] = nickname + "님이 나갔습니다.";
}
}
Review
-
HashMap의 개념과 문제를 제대로 이해한다면 충분히 풀 수 있는 문제였다.
-
해당 문제를 풀면서, HashMap의 개념을 제대로 깊이 이해할 필요가 생겼다는 계기가 되었다.