반응형
문제 URL
https://school.programmers.co.kr/learn/courses/30/lessons/42888
문제 설명
주어진 문제는 오픈 채팅방에서 사용자의 행동을 기록한 로그를 바탕으로, 최종적으로 출력할 메시지를 생성하는 것입니다. 다양한 사용자의 닉네임 변경 이력과 입퇴장 기록을 처리해야 하며, 효율적으로 닉네임 정보를 관리해야 합니다.
나의 풀이
풀이 과정
- 닉네임 관리:
- HashMap을 사용하여 사용자의 고유 ID에 대한 최신 닉네임을 저장합니다.
- 명령이 "Enter" 또는 "Change"일 경우, 닉네임 정보를 업데이트합니다.
- HashMap을 사용하여 사용자의 고유 ID에 대한 최신 닉네임을 저장합니다.
- 최종 메시지 생성:
- 명령이 "Enter"인 경우, "님이 들어왔습니다." 메시지를 추가합니다.
- 명령이 "Leave"인 경우, "님이 나갔습니다." 메시지를 추가합니다.
- 이 과정에서 사용자 ID에 대응하는 최신 닉네임을 HashMap에서 조회하여 사용합니다.
코드
import java.util.*;
class Solution {
public String[] solution(String[] record) {
HashMap<String, String> userMap = new HashMap<>();
// 1단계: 최신 닉네임 업데이트
for (String rec : record) {
String[] recs = rec.split(" ");
if (recs[0].equals("Enter") || recs[0].equals("Change")) {
userMap.put(recs[1], recs[2]); // 사용자 ID를 키로 최신 닉네임 저장
}
}
// 2단계: 출력 메시지 생성
ArrayList<String> messages = new ArrayList<>();
for (String rec : record) {
String[] recs = rec.split(" ");
if (recs[0].equals("Enter")) {
messages.add(userMap.get(recs[1]) + "님이 들어왔습니다.");
} else if (recs[0].equals("Leave")) {
messages.add(userMap.get(recs[1]) + "님이 나갔습니다.");
}
}
return messages.toArray(new String[0]); // ArrayList를 배열로 변환
}
}
알게된 점
1. toArray() 메서드의 역할
- toArray()는 컬렉션(List, Set 등)의 요소를 배열로 변환하는 메서드입니다.
- 두 가지 방식으로 사용할 수 있습니다:
- 매개변수 없이 호출:
- Object[] 타입의 배열을 반환하며, 타입 캐스팅이 필요합니다.
- 타입 안정성이 떨어지기 때문에 잘 사용되지 않습니다.
- 매개변수로 배열 전달:
- 지정한 타입의 배열을 반환합니다.
- 매개변수 배열의 크기가 작으면 새 배열을 생성하여 반환하며, 크기가 충분하면 기존 배열을 재사용합니다.
2. new String[0]의 의미
- new String[0]은 크기가 0인 빈 배열을 생성합니다.
- Java에서는 배열의 타입이 명확해야 하므로, 이 배열을 통해 반환될 배열의 타입(String[])을 지정합니다.
- 크기가 0이어도 문제가 없는 이유는 다음과 같습니다:
- JVM이 컬렉션의 크기를 기반으로 적절한 크기의 새 배열을 생성합니다.
- Java 8 이상에서는 new String[0]과 같은 작은 배열을 전달할 경우 내부적으로 최적화되어 동작합니다.
반응형
'알고리즘 > Java' 카테고리의 다른 글
[프로그래머스] 베스트앨범 - 42579 (Java) (0) | 2025.01.20 |
---|---|
[프로그래머스] 할인 행사 - 131127(Java) (0) | 2025.01.09 |
[프로그래머스] 완주하지 못한 선수 - 42576(Java) (0) | 2025.01.07 |
[프로그래머스] 다리를 지나는 트럭 - 42583(Java) (0) | 2025.01.02 |
[프로그래머스] 카드 뭉치 - 159994 (Java) (0) | 2024.12.27 |