[JAVA 문제 풀이] 349. 오픈채팅방

프로그래머스 (42888)
Stupefyee's avatar
Jun 30, 2025
[JAVA 문제 풀이] 349. 오픈채팅방
notion image
notion image
 

내가 작성한 코드

import java.util.*; class Solution { public String[] solution(String[] record) { Map<String, String> uidMap = new HashMap<>(); // uid, name int length = 0; // 정답 배열 길이용 변수 // uid당 닉네임 매핑 >> change 덮어 씌우기 for(String r : record) { String[] arr = r.split(" "); // 정답배열에 담아야함 >> length 증가 if(arr[0].equals("Enter") || arr[0].equals("Leave")) length++; // Leave는 Map 변동사항 없음 >> 건너띄기 if(arr[0].equals("Leave")) continue; uidMap.put(arr[1], arr[2]); // Enter, Change >> Map에 저장 } String[] answer = new String[length]; int idx = 0; // Enter, Leave를 담아서 정답배열에 저장 for(String r : record) { String[] arr = r.split(" "); if(arr[0].equals("Enter")) { String name = uidMap.get(arr[1]); answer[idx++] = name + "님이 들어왔습니다."; } if(arr[0].equals("Leave")) { String name = uidMap.get(arr[1]); answer[idx++] = name + "님이 나갔습니다."; } } return answer; } }
 

다른 사람의 코드

import java.util.*; class Solution { // 정답에 담을 문자열 private static final String ENTER_FORMAT = "%s님이 들어왔습니다."; private static final String LEAVE_FORMAT = "%s님이 나갔습니다."; private HashMap<String, UserInfo> userMap = new HashMap<>(); // 유저 정보 클래스 private class UserInfo { public String userId; public String nickName; public UserInfo(String userId, String nickName) { this.userId = userId; this.nickName = nickName; } } // 유저 컨트롤 클래스 private class Command { public char command; public String userId; public Command(char command, String userName) { this.command = command; this.userId = userName; } } public String[] solution(String[] records) { ArrayList<Command> commandList = new ArrayList<>(); for (String record : records) { String[] split = record.split(" "); String command = split[0]; String userId = split[1]; String nickName = null; // 각 커맨드 별로 처리 switch(command.charAt(0)) { case 'E': // Enter nickName = split[2]; if(userMap.containsKey(userId) == false) { // Map에 없으면 저장 userMap.put(userId, new UserInfo(userId, nickName)); } else { // 이미 있으면 갱신 userMap.get(userId).nickName = nickName; } commandList.add(new Command(command.charAt(0), userId)); // 커맨드 리스트에 저장 break; case 'L': // Leave commandList.add(new Command(command.charAt(0), userId)); // 커맨드 리스트에 저장 break; case 'C': // Change nickName = split[2]; userMap.get(userId).nickName = nickName; // Map에 갱신 break; } } // %s자리 채워 넣으며 배열로 전환 return commandList.stream() .map(cmd -> String.format( cmd.command == 'E' ? ENTER_FORMAT : LEAVE_FORMAT , userMap.get(cmd.userId).nickName)) .toArray(ary -> new String[commandList.size()]); } }
  • 객체화
Share article

stupefyee