컴퓨터/프로그래머스
프로그래머스 - 42888번: 오픈채팅방 [Java]
이상한 나그네
2023. 11. 1. 00:39
문제: https://school.programmers.co.kr/learn/courses/30/lessons/42888
1. 코드
import java.util.*;
class Solution {
public List<String> solution(String[] record) {
List <String> list = new ArrayList<>();
Map <String, String> map = new HashMap<>();
for(String r : record) {
String[] s = r.split(" ");
list.add(s[1] + " "+ s[0]);
if(s.length == 3)
map.put(s[1], s[2]);
}
List<String> answer = new ArrayList<>();
for(String l : list) {
String[] s = l.split(" ");
String status = " 나갔습니다.";
if(s[1].equals("Enter"))
status = " 들어왔습니다.";
else if(s[1].equals("Change")) continue;
answer.add(map.get(s[0]) + "님이" + status);
}
return answer;
}
}
2. 설명
List <String> list = new ArrayList<>();
Map <String, String> map = new HashMap<>();
for(String r : record) {
String[] s = r.split(" ");
list.add(s[1] + " "+ s[0]);
if(s.length == 3)
map.put(s[1], s[2]);
}
record의 문장을 하나씩 r을 통해서 접근하여 r의 문장을 띄어쓰기를 기준으로 분리하여 배열 s에 저장합니다. 그리고 list에 유저 아이디 정보와 유저의 채팅방 참여 여부를 띄어쓰기와 함께 저장합니다.
map에는 Leave를 제외한 Enter와 Change에서 유저 아이디와 유저 닉네임 정보가 r에 저장되었기에 유저 아이디를 키 값으로 유저 닉네임을 키 값에 대응하는 값으로 저장합니다.
List<String> answer = new ArrayList<>();
for(String l : list) {
String[] s = l.split(" ");
String status = " 나갔습니다.";
if(s[1].equals("Enter"))
status = " 들어왔습니다.";
else if(s[1].equals("Change")) continue;
answer.add(map.get(s[0]) + "님이" + status);
}
list에 저장된 값을 l을 통해 접근하며 띄어쓰기를 기준으로 분리하여 배열 s에 저장합니다. status는 채팅방에 들어왔는지 나갔는지 알려주는 문자열입니다. s[1]의 값이 Enter라면 '들어왔습니다.'를 아니라면 '나갔습니다.'를 저장합니다. 만약 Change라면 이름의 변경 여부만 나타낸 것이기에 다음 list에 접근합니다.
answer에 map을 통해서 유저의 최종 닉네임과 함께 status를 문제에서 요구하는대로 출력하면 문제는 해결됩니다.
3. 정리
- 최종 닉네임의 변경 여부를 확인하는 것이기에 Map을 이용하여 쉽게 해결할 수 있다.
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges