프로그래머스 | 오픈채팅방 (Java)

mul·2023년 3월 8일
0

코딩테스트연습

목록 보기
36/56

🔒 문제

프로그래머스 Lv.2 2019 KAKAO BLIND RECRUITMENT 오픈채팅방

🔑 해결

채팅방에 들어오고 나가거나, 닉네임을 변경한 기록이 담긴 문자열 배열 record가 매개변수로 주어질 때, 모든 기록이 처리된 후, 최종적으로 방을 개설한 사람이 보게되는 메시지를 문자열 배열 형태로 return하는 solution 함수를 작성하는 문제이다.

아이디에 대해 닉네임을 생성하거나 바꿀 때마다 저장할 HashMap을 생성하여 문제를 해결하였다. for문을 통해 아이디를 key값으로 두고, 아이디가 생성되거나 바뀔 때마다 HashMap에 put해주었다. 반복문이 끝난 뒤에는 최종적으로 변경된 아이디만 저장되어 있게 하였다.

  1. 아이디에 대해 닉네임을 저장할 HashMap nickname 생성한다.
  2. for문을 돌면서, record에 담긴 문자열을 " "을 기준으로 분리하여 command 배열에 저장하였다.
  3. 첫단어(command[0])은 'Enter'/'Leave'/'Change' 중 하나이므로 첫단어가 'Enter'이거나 'Change'라면 nickname에 아이디(command[1])를 key값으로 닉네임(command[2])를 put
  4. 방을 개설한 사람이 보게될 메시지를 저장할 ArrayList list를 생성한다.
  5. for문을 돌면서, record에 담긴 문자열을 " "을 기준으로 분리하여 command 배열에 저장하고, nickname에서 아이디(command[1])를 key값으로 갖는 값을 문자열 nick에 저장한다.
  6. list에 nick과 첫단어에 맞는 문장을 붙여 add
  7. list에 저장된 값을 answer배열에 저장한다.

🔓 코드

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
class Solution {
    public String[] solution(String[] record) {
        String[] answer;
        
        Map<String, String> nickname = new HashMap<>();
        
        for (int i = 0; i < record.length; i++) {
			String[] command = record[i].split(" ");
			if (command[0].equals("Enter") || command[0].equals("Change")) {
				nickname.put(command[1], command[2]);
			}
		}

        ArrayList<String> list = new ArrayList<>();
        
        for (int i = 0; i < record.length; i++) {
			String[] command = record[i].split(" ");
			String nick = nickname.get(command[1]);
			if (command[0].equals("Enter")) {
				list.add(nick + "님이 들어왔습니다.");
			} else if (command[0].equals("Leave")) {
				list.add(nick + "님이 나갔습니다.");
			}
		}
        
        answer = new String[list.size()];
        for (int i = 0; i < answer.length; i++) {
			answer[i] = list.get(i);
		}
        
        return answer;
    }
}

0개의 댓글