알고리즘
[프로그래머스] 오픈채팅방
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