알고리즘

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

greenkang 2022. 6. 7. 22:21

풀이 방법

1. HashMap을 사용하여 아이디별 최종닉네임을 저장할 변수 nickname 선언 (HashMap은 key, value로 이루어진 자료구조)

 

2. record의 모든 값들을 반복하며 들어오는 경우닉네임을 변경하는 경우, 각 아이디별 닉네임을 갱신 

 

3. 메세지를 작성할 ArrayList 선언 

 이때, 배열이 아닌 ArrayList를 사용한 이유는 나갈경우에는 메세지를 작성하지 않아 record 의 길이와 메세지가 들어갈 배열의 길이가 같지 않기 때문임

사실 변수를 사용하면 해결 될 문제지만 코드가 길어지고 가독성이 좋지 않을것으로 판단되어 ArrayList사용

 

4. record의 모든 값들을 반복하며 들어오는 경우나가는 경우, 닉네임 변수에서 키로 값을 가져와 닉네임 + 메세지를 작성

 

5. ArrayList를 Array로 변환하여 return 

 

코드_Java

import java.util.HashMap;
import java.util.ArrayList;

class Solution {
    public String[] solution(String[] record) {
        
        //최종 닉네임을 nickname에 저장
        HashMap<String, String> nickname = new HashMap<>();
        for(String rcd: record){
            String[] rcdArr = rcd.split(" ");
            if(rcdArr.length > 2) nickname.put(rcdArr[1], rcdArr[2]);
        }
        
        //채팅방 메세지 저장
        ArrayList<String> answer = new ArrayList<>();
        for(String rcd: record){
            String[] rcdArr = rcd.split(" ");
            if("Enter".equals(rcdArr[0])) answer.add(nickname.get(rcdArr[1]) + "님이 들어왔습니다." );
            else if("Leave".equals(rcdArr[0])) answer.add(nickname.get(rcdArr[1]) + "님이 나갔습니다." );
            
        }
        
        return answer.toArray(new String[answer.size()]);
    }
}

 

코드_Python

def solution(record):
    answer = []
    
    #각 id의 최종 nickname 저장
    id_nickname = dict()
    for r in record:
        r_list = r.split(" ")
        if len(r_list) > 2:
            id_nickname[r_list[1]] = r_list[2]
    
    #결과 작성
    for r in record:
        r_list = r.split(" ")
        status, id = r_list[0], r_list[1]
        if status == 'Enter':
            answer.append(id_nickname[id] + '님이 들어왔습니다.')
        elif status == 'Leave':
            answer.append(id_nickname[id] + '님이 나갔습니다.')
        
    return answer

https://programmers.co.kr/learn/courses/30/lessons/42888?language=python3 

 

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

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

programmers.co.kr