![[프로그래머스] 오픈채팅방 - LV 2](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTo1Im%2FbtsMe08lVKI%2FUm9KTfF5mKSjBJtWXvZkYk%2Fimg.png)
📝 문제
https://school.programmers.co.kr/learn/courses/30/lessons/42888?language=java
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
🔑 풀이
class Solution {
public String[] solution(String[] record) {
HashMap<String, String> nickname = new HashMap<>();
HashMap<String, String> msg = new HashMap<>();
msg.put("Enter", "님이 들어왔습니다.");
msg.put("Leave", "님이 나갔습니다.");
for (String s : record) {
String[] split = s.split(" "); // 띄워쓰기 기준 split
// Enter, Change 일 때만 아이디를 해시맵의 key 값으로, 닉네임은 value 값으로 활용
// 아이디가 겹치면 최종 닉네임을 덮어쓴다 -> HashMap 활용
if (split.length == 3) {
nickname.put(split[1], split[2]); // key, value
}
}
ArrayList<String> answer = new ArrayList<>();
for (String s : record) {
String[] split = s.split(" ");
if (msg.containsKey(split[0])) {
answer.add(nickname.get(split[1]) + msg.get(split[0]));
}
}
return answer.toArray(new String[0]);
}
}
[설명]
유저 아이디 별로, 가장 마지막 닉네임으로 채팅방 메세지 변환
[접근 방법]
1. 유저아이디 별로, 가장 마지막 닉네임을 HashMap에 저장
2. HashMap에 저장한 닉네임을 꺼내서 메시지를 만든다.
3. ArrayList에 메시지를 저장한다.
4. ArrayList를 배열로 변환한다.
[유의 사항]
어느 아이디를 가지고 있던 사람의 마지막 닉네임이 무엇인지가 제일 중요하다.
그 전에 어떤 닉네임을 사용했는지는 안 중요하다.
기존에 닉네임이 마지막에 다 바뀌기 때문이다.
Enter, Change 일 때만 아이디를 해시맵의 key 값으로, 닉네임은 value 값으로 활용
아이디가 겹치면 최종 닉네임을 덮어쓴다 -> HashMap 활용
📌 [TIL]
new String[0]을 사용하는 이유는 Java에서 ArrayList를 배열로 변환할 때, 반환되는 배열의 타입을 명시하기 위해서.
toArray 메서드는 ArrayList의 요소를 배열로 변환하는데, 이 메서드는 두 가지 형태로 오버로딩되어 있다.
toArray(): 매개변수를 받지 않고, Object[] 타입의 배열을 반환한다.
toArray(T[] a): 매개변수로 전달된 배열의 타입에 맞춰서 배열을 반환한다. 만약 전달된 배열의 크기가 ArrayList의 크기보다 작으면, 새로운 배열이 생성되어 반환된다.
new String[0]을 전달하는 것은 다음과 같은 이유로 사용된다.
- 타입 안전성: new String[0]을 사용하면 반환되는 배열의 타입이 String[]로 보장된다. 이는 타입 캐스팅을 피할 수 있게 해준다.
- 배열 크기: new String[0]은 크기가 0인 배열을 생성한다.
이 배열은 ArrayList의 크기에 맞춰서 새로운 배열이 생성될 수 있도록 한다.
즉, ArrayList의 요소가 0개일 경우, 빈 배열이 반환되고, 요소가 있을 경우 그 크기에 맞는 배열이 반환된다.
예를 들어, answer.toArray(new String[0])를 호출하면, answer에 있는 요소의 수에 따라 적절한 크기의 String 배열이 생성되어 반환된다. 만약 answer가 비어 있다면, 빈 String 배열이 반환된다.
이러한 방식은 Java에서 배열을 다룰 때 일반적으로 사용되는 패턴이다.
'프로그래머스' 카테고리의 다른 글
99클럽 코테 스터디 3일차 TIL - 프로그래머스 : 바탕화면 정리 (0) | 2025.04.02 |
---|---|
[프로그래머스] 롤케이크 자르기 - LV2 (1) | 2025.02.14 |
[프로그래머스] 디펜스 게임 - LV 2 (0) | 2025.02.12 |
[프로그래머스] 콜라 문제 (0) | 2024.09.30 |
[프로그래머스] 가장 가까운 같은 글자 (1) | 2024.09.25 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!