티스토리 뷰

안녕하세요

프로그래머스 오픈 채팅방 문제 풀이입니다.

 

문제는 아래의 링크로 확인해주세요!

programmers.co.kr/learn/courses/30/lessons/42888

 

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

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

programmers.co.kr

● 문제 간단 설명

오픈 채팅방을 사용하는 경우는 아래 세 가지와 같습니다.

  • 채팅방에 들어오는 경우 : 채팅방에 'OOO님이 들어왔습니다'라고 화면에 출력됩니다.
  • 채팅방을 나가는 경우 : 채팅방에 'OOO님이 나갔습니다.'라고 화면에 출력됩니다.
  • 채팅방에서 닉네임을 변경하는 경우 : 채팅방의 모든 이름이 변경된 이름으로 바뀝니다. 다른 출력은 없습니다.

위의 규칙에 맞게 적절한 대화들이 출력하는 문제입니다.

 

● 문제 해결 방향

처음 문제를 풀 땐 하나의 채팅이 추가될때마다 출력해주었습니다.

그렇게 하다 보니 어떤 경우에는 같은 유저가 아니지만 같은 이름을 가진 유저들의 이름도 바뀌게 되는 이슈가 있었습니다.

그러한 점을 방지하기 위해 주어진 유저들의 아이디와 이름을 dict로 묶어 이후 명령어들이 다 처리된 후

한 번에 메시지를 출력하는 방법으로 코딩을 하였습니다.

 

● 문제 해결 코드

def solution(record):
    user = {}
    answer = []
    for r in record:
        info = r.split()
        if info[0] == 'Enter':
            user[info[1]] = info[2]
            answer.append(['{}님이 들어왔습니다.', info[1]])
        elif info[0] == 'Leave':
            answer.append(['{}님이 나갔습니다.', info[1]])
        elif info[0] == 'Change':
            user[info[1]] = info[2]
            
    answer = [ a[0].format(user[a[1]]) for a in answer]
            
    
    return answer

먼저 user들의 id가 들어가는 dict와 채팅방에 입력될 answer 리스트를 설정해주고,

record를 하나씩 처리하면서 'Enter'의 경우에는 user에 새롭게 추가해주고, answer 리스트에는 '들어왔습니다'  채팅을 추가했습니다.

'Leave'의 경우는 user에는 변동이 없고, 'answer'리스트에만 '나갔습니다' 채팅만 추가했습니다.

'Change'의 경우는 user dict 내 같은 아이디를 가진 유저의 이름을 바꾸어주었습니다.

 

이런 식으로  id를 통해 유저들의 이름을 설정하는 방법을 사용했습니다.

 

이상 오픈 채팅방 문제풀이였습니다!

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함