[JAVA] 프로그래머스 : 오픈채팅방

조예빈·2024년 7월 23일
0

Coding Test

목록 보기
68/138

https://school.programmers.co.kr/learn/courses/30/lessons/42888

초반에는 전부 들어 온 후에 닉네임을 변경 해 주어야 한다고 생각해서 Enter를 통해 HashMap을 생성한 후 이 key값을 이용해서 value를 변경하도록 구현하였다. 하지만, 테스트코드의 일부를 통과하지 못하였다.

시점에 문제가 있었기 때문이다. 우선, 내가 처음에 생각했던 대로 전부 입장하고 그 이후에 닉네임을 change해 주면 출력 메세지가 달라진다. 그러니 변경과 입장의 시점을 동시에 두어야 한다.

change를 하고 나중에 enter를 하게 되면 update가 되지 않기 때문이다(enter에서 put(input[1], input[2])로 구현했기 때문)

import java.util.*;

class Solution {
    public ArrayList solution(String[] record) {
        //record 안에는 Enter uid1234 Muzi같은 식으로 들어 있음
        //해시맵에 key를 uid로, value를 Muzi로 설정
        //이름 바뀐걸 어떻게 적용시키나
        //시점 중요 : enter -> change -? leave
        HashMap<String, String> map = new HashMap<>();
        int r = record.length;
        ArrayList<String> answer = new ArrayList<>();
        
        for(int i=0; i<r; i++){
            String[] input = record[i].split(" ");
            if(input[0].equals("Enter") || input[0].equals("Change")){ //입장인 경우에는
                map.put(input[1], input[2]); //map에 추가
            }
           
        }   
        for(int i=0; i<r; i++){
            String[] input = record[i].split(" ");
            if(input[0].equals("Enter")){ //입장이면 변경된 닉네임으로 출력
                answer.add(map.get(input[1]) + "님이 들어왔습니다.");
            }else if(input[0].equals("Leave")){
                answer.add(map.get(input[1]) + "님이 나갔습니다."); 
            }
        }
        return answer;
    }
}

profile
컴퓨터가 이해하는 코드는 바보도 작성할 수 있다. 사람이 이해하도록 작성하는 프로그래머가 진정한 실력자다. -마틴 파울러

0개의 댓글