Dazzling 개발 노트

[프로그래머스] 오픈채팅방 (Java) 본문

Algorithm/프로그래머스

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

dj._.dazzling 2024. 4. 15. 10:45

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

문제

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

풀이/후기

생각보다 쉽고 간단하게 해결할 수 있는 문제였는데,

비효율적으로 풀다가 테스트케이스 하나가 안넘어가서 삽질을 엄청했다 ㅎ

 

로그를 id로 미리 기록한 후 닉네임은 최종 값을 기준으로 id를 덮어씌우도록 풀었다.

map을 잘 활용해서 푼 것 같아 좋았다!

코드

import java.util.*;

class Solution {
    public ArrayList<String> solution(String[] record) {
        
        HashMap<String, String> map = new HashMap<>();
        ArrayList<String> answer = new ArrayList<>(); // id : 닉네임
        
        for (String r : record){
            StringTokenizer str = new StringTokenizer(r, " ");
            
            String func = str.nextToken();
            String user = str.nextToken();
            
            if (func.equals("Enter")){
                // log에 id로 기록
                answer.add(user+"님이 들어왔습니다.");
                
                // id에 대한 닉네임 저장
                String nickname = str.nextToken();
                map.put(user, nickname);
                
            } else if ( func.equals("Leave") ){
                // log에 id로 기록
                answer.add(user+"님이 나갔습니다.");
                
            } else if ( func.equals("Change") ){
                // id에 대한 수정된 닉네임 저장
                String nickname = str.nextToken();
                map.put(user, nickname);
            }
            
        }
        
        // id를 닉네임으로 바꿔주기
        for (int i=0; i < answer.size(); i++){
            String[] log = answer.get(i).split("님이 ");
            String id = log[0];
            String action = log[1];
            answer.set(i, map.get(id) + "님이 "+ action);
        }
        
        return answer;
    }
    
    
}

Commit

https://github.com/allrightDJ0108/CodingTestStudy/blob/master/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/2/42888.%E2%80%85%EC%98%A4%ED%94%88%EC%B1%84%ED%8C%85%EB%B0%A9/%EC%98%A4%ED%94%88%EC%B1%84%ED%8C%85%EB%B0%A9.java

참고