본문 바로가기
Algorithm/Programmers

[Programmers] 오픈채팅방

by J4J 2021. 3. 25.
300x250
반응형

문제

 

2019 KAKAO BLIND RECRUITMENT > 오픈채팅방

 

코딩테스트 연습 - 오픈채팅방

오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오

programmers.co.kr

 

 

아이디어

 

이번 문제의 아이디어는 아이디에 맞는 닉네임 매핑 방법이라고 생각합니다.

 

그리고 닉네임을 매핑하는 방법은 map을 사용하면 됩니다.

 

key는 아이디, value는 닉네임으로 한 map을 생성하여 채팅방에 사람들이 들어올 때마다 key-value쌍을 지어 순서대로 모두 넣어주게 되면 결과적으로 마지막에 저장되어 있는 값이 아이디에 해당하는 닉네임이 될 것입니다.

 

들어오거나 나갈 때 발생되는 로그들은 리스트에 저장해 두고 모든 기록을 훑은 뒤 저장해 둔 로그들을 아이디에 맞는 닉네임을 넣어줘서 결과값에 넣어주면 끝인 문제입니다.

 

 

구현 코드 (Java)

 

import java.util.*;

class Solution {
    public String[] solution(String[] record) {
        Map<String, String> userInfo = new HashMap<String, String>(); // key: userId, value: userNickname
        List<Node> list = new ArrayList<Node>(); // 로그 저장
        
        for(int i=0; i<record.length; i++) {
        	String str_split[] = record[i].split(" ");
        	
        	if(str_split[0].equals("Enter")) { // 들어왔을 경우
        		String userId = str_split[1];
        		String nickname = str_split[2];
        		
        		userInfo.put(userId, nickname); // map에 아이디와 닉네임을 매핑하여 저장
        		
        		list.add(new Node(userId, "님이 들어왔습니다.")); // 들어온 로그 저장
        	} else if(str_split[0].equals("Leave")) { // 나갈 경우
        		String userId = str_split[1];
        		
        		list.add(new Node(userId, "님이 나갔습니다.")); // 나간 로그 저장
        	} else if(str_split[0].equals("Change")) { // 닉네임 변경할 경우
        		String userId = str_split[1];
        		String nickname = str_split[2];
                
        		userInfo.put(userId, nickname); // map에 아이디와 닉네임을 새로 매핑
        	}
        }
        
        String res[] = new String[list.size()];
        for(int i=0; i<list.size(); i++) {
        	Node node = list.get(i);
        	res[i] = userInfo.get(node.userId) + node.comment;
        }
        
        return res;
    }
    
    private static class Node {
    	String userId;
    	String comment;
	public Node(String userId, String comment) {
		this.userId = userId;
		this.comment = comment;
	}
    }
}

 

 

 

읽어주셔서 감사합니다.

728x90
반응형

'Algorithm > Programmers' 카테고리의 다른 글

[Programmers] 길 찾기 게임  (0) 2021.04.02
[Programmers] 후보키  (0) 2021.03.27
[Programmers] 블록 이동하기  (0) 2021.03.20
[Programmers] 자물쇠와 열쇠  (0) 2021.03.19
[Programmers] 괄호 변환  (0) 2021.03.18

댓글