https://school.programmers.co.kr/learn/courses/30/lessons/42888
코딩테스트 연습 > 2019 KAKAO BLIND RECRUITMENT > 오픈채팅방
난이도: LEVEL2
알고리즘 유형: 구현
문제 분석
Map<String, String> key: uuid value: 제일 최근 닉네임
map 자료구조에 record 배열을 순차적으로 순회하면서 해당 uuid의 닉네임을 제일 최근 닉네임으로 갱신한다.
그리고 반환 String 배열에는 IN/OUT을 출력해야 하니까 Change가 아니면 카운트해준다. (cnt 변수)
그리고 다시 record 배열을 순차적으로 순회하면서
IN/OUT이면 출력을 해준다. 이때 출력은 map으로 가져와서 최신 닉네임으로 해준다.
record 배열 길이가 최대 10,0000이고 내 풀이는 겨우 2번 순회하니까 시간 초과는 발생할 일 없을 거라 예상했다.
정답 코드
import java.util.*;
import java.util.stream.*;
class Solution {
static final String IN_SUFFIX = "님이 들어왔습니다.";
static final String OUT_SUFFIX = "님이 나갔습니다.";
static HashMap<String, String> map = new HashMap<>();
public String[] solution(String[] record) {
int cnt = 0;
for(String next : record){
String [] split = next.split(" ");
// 갱신 or 생성
if(split[0].equals("Enter") || split[0].equals("Change")){
map.put(split[1], split[2]);
}
if(split[0].equals("Enter") || split[0].equals("Leave")) cnt++;
}
String [] answer = new String [cnt];
int index = 0;
for(int i = 0; i < record.length; i++){
String [] split = record[i].split(" ");
if(split[0].equals("Change")) continue;
if(split[0].equals("Enter")){
answer[index++] = map.get(split[1]) + IN_SUFFIX;
}
else answer[index++] = map.get(split[1]) + OUT_SUFFIX;
}
return answer;
}
}
'Algorithm > Programmers Java' 카테고리의 다른 글
[JAVA] 프로그래머스 LEVEL2 괄호 변환 (4) | 2024.10.11 |
---|---|
[JAVA] 프로그래머스 LEVEL2 스킬트리 (0) | 2024.10.11 |
[JAVA] 프로그래머스 LEVEL2 [3차] 파일명 정렬 (4) | 2024.10.10 |
[JAVA] 프로그래머스 LEVEL2 [3차] 압축 (3) | 2024.10.09 |
[JAVA] 프로그래머스 LEVEL2 후보키 (1) | 2024.10.08 |