728x90
728x90
문제링크
문제풀이
👨🏻💻 핵심 스킬 👨🏻💻
Map, 구현
카카오 오픈채팅방의 입장과 퇴장의 로그를 리턴해주는 문제이다. 닉네임을 변경하는 경우에는 과거의 입장 및 퇴장의 닉네임도 변경해주어야 한다. 닉네임을 변경하는 방법은 다시 입장시 혹은 방 안에서 변경이 가능하다.
닉네임은 Map을 활용하여 id와 닉네임을 매핑시켜주었다. 모든 record를 확인하여 출력해주어야할 log는 가변배열인 ArrayList를 사용해서 넣어주었고, 닉네임이 변경될 수 있는 경우인 새로 입장하는 경우나 Change를 보내는 경우에는 Map을 계속 수정해주어 닉네임 수정을 계속 확인하여 문제를 해결하였다.
구현코드
package pgm_42888;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class Solution {
public String[] solution(String[] records) {
ArrayList<String[]> logs = new ArrayList<>();
Map<String, String> nameMap = new HashMap<>();
for(String record : records){
String[] log = new String[2];
String[] splitRecord = record.split(" ");
if(!splitRecord[0].equals("Change")) {
log[0] = splitRecord[0];
log[1] = splitRecord[1];
logs.add(log);
}
if(!splitRecord[0].equals("Leave")) {
nameMap.put(splitRecord[1], splitRecord[2]);
}
}
String[] answer = new String[logs.size()];
for(int i = 0; i < logs.size(); i++){
String[] log = logs.get(i);
if(log[0].equals("Enter")){
answer[i] = nameMap.get(log[1]) + "님이 들어왔습니다.";
}
else{
answer[i] = nameMap.get(log[1]) + "님이 나갔습니다.";
}
}
return answer;
}
}
시간복잡도
입력으로 주어지는 Record를 모두 확인하며 진행되기 떄문에 O(Record의 수)이다.
잘못된 지식이나 궁금한 내용이 있을 경우 편하게 댓글 남겨주시면 감사하겠습니다 :)
728x90
728x90
'CodingTest > Programmers' 카테고리의 다른 글
[카카오] k진수에서 소수 개수 구하기 (java) (0) | 2022.01.22 |
---|---|
[카카오] 주차 요금 계산 (java) (0) | 2022.01.20 |
[카카오] 단체사진찍기 (java) (0) | 2022.01.16 |
[카카오] 신고 결과 받기 (java) (0) | 2022.01.15 |
[카카오] 카카오 프렌즈 컬러링북 (java) (0) | 2022.01.02 |