프로그래머스 42888. 오픈채팅방
오픈채팅방 문제를 풀면서 얻어갈 수 있는 것들이 무엇이 있는지 살펴보고 뜯어먹어보자.
얻어 가야 하는 것
- 자료구조 HashMap
- 특정 값을 찾기 위해 저장된 데이터를 모두 순회하기에는 데이터가 너무 많을 경우에 Map을 사용할 수 있다.
(모두 순회하면 O(N), HashMap 조회는 일반적으로 O(1))
- Key는 하나만 존재할 수 있다.
(즉, 값을 넣을 때 동일한 키가 존재한다면 value만 변경된다.)
- 특정 값을 찾기 위해 저장된 데이터를 모두 순회하기에는 데이터가 너무 많을 경우에 Map을 사용할 수 있다.
- List를 Array로 바꾸기
- Java8에서는 stream을 활용해 간단히 변환할 수 있다.
arrayList.stream().toArray(array -> new String[arrayList.size()]);
이런 식으로 활용한다.
- Java8에서는 stream을 활용해 간단히 변환할 수 있다.
List<String> arrayList = new ArrayList<>();
arrayList.add("a");
arrayList.add("b");
String[] result1 = new String[arrayList.size()];
for(int i=0; i<arrayList.size(); i++) {
result1[i] = arrayList.get(i);
}
String[] result2 = arrayList.stream().toArray(array -> new String[arrayList.size()]);
if (Arrays.equals(result1, result2)) {
System.out.println("true"); //출력된다.
}
프로그래머스 42888 문제 링크 및 핵심 아이디어
https://programmers.co.kr/learn/courses/30/lessons/42888
- HashMap을 사용해서 유저를 식별하는 id값과 닉네임을 매칭하여 각 유저의 현재 닉네임을 추적할 수 있는 자료구조를 만든다.
- 입력으로 주어진 record를 실행하고 나서 마지막으로 매칭된 각 id의 닉네임을 사용해 정답을 출력해줄 수 있다.
풀이
import java.util.*;
class Solution {
public String[] solution(String[] record) {
Map<String,String> idMap = new HashMap<>();
for(String cmd : record) {
String[] splitCmd = cmd.split(" ");
if(splitCmd[0].equals("Enter") || splitCmd[0].equals("Change")) {
idMap.put(splitCmd[1], splitCmd[2]);
}
}
List<String> answerList = new ArrayList<>();
for(String cmd : record) {
String[] splitCmd = cmd.split(" ");
if(splitCmd[0].equals("Enter")) {
answerList.add(idMap.get(splitCmd[1])+"님이 들어왔습니다.");
}
if(splitCmd[0].equals("Leave")) {
answerList.add(idMap.get(splitCmd[1])+"님이 나갔습니다.");
}
}
return answerList.stream().toArray(array -> new String[answerList.size()]);
}
}