티스토리 뷰
https://programmers.co.kr/learn/courses/30/lessons/42888
코딩테스트 연습 - 오픈채팅방
오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오
programmers.co.kr
오픈채팅방
카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다.
신입사원인 김크루는 카카오톡 오픈 채팅방을 개설한 사람을 위해, 다양한 사람들이 들어오고, 나가는 것을 지켜볼 수 있는 관리자창을 만들기로 했다. 채팅방에 누군가 들어오면 다음 메시지가 출력된다.
"[닉네임]님이 들어왔습니다."
채팅방에서 누군가 나가면 다음 메시지가 출력된다.
"[닉네임]님이 나갔습니다."
채팅방에서 닉네임을 변경하는 방법은 다음과 같이 두 가지이다.
- 채팅방을 나간 후, 새로운 닉네임으로 다시 들어간다.
- 채팅방에서 닉네임을 변경한다.
입출력 예
문제 풀이
파이썬을 이용해서 풀면 간단하게 풀리는 문제이다.
(유저ID: 닉네임) 이라는 딕셔너리 형태로 메세지를 출력하기 전 유저 ID와 닉네임을 모두 최신화한다.
그렇게 되면 메세지를 출력하기 전, 모든 유저의 닉네임을 최신화된 상태로 가질 수 있다.
닉네임을 최신화하는 과정이 발생하는 조건은
1. 새로운 유저가 들어오는 경우 -> Enter
2. 유저가 닉네임을 바꾸는 경우 -> Change
총 2가지 조건이 있다. 둘 중 하나의 조건이라도 해당되면 닉네임을 최신화하면 된다.
출력하는 과정에서 생길 수 있는 조건은
1. 채팅방에 들어오는 경우 -> Enter
2. 채팅방을 나가는 경우 -> Leave
총 2가지 조건이 있다. 그러므로 Enter일때와 Leave일때로 분기하여 적절하게 출력하면된다.
def solution(record):
answer = []
client_dict = {} # (id, name)으로 딕셔너리 형태로 저장
for data in record:
data = data.split(' ')
status = data[0]
if status == 'Enter' or status == 'Change':
uid = data[1]
name = data[2]
client_dict[uid] = name
for data in record:
data = data.split(' ')
status = data[0]
uid = data[1]
if status == 'Enter':
message = "{}님이 들어왔습니다.".format(client_dict[uid])
answer.append(message)
elif status == 'Leave':
message = "{}님이 나갔습니다.".format(client_dict[uid])
answer.append(message)
return answer
'알고리즘' 카테고리의 다른 글
[프로그래머스] 2개 이하로 다른 비트 - 파이썬 (0) | 2022.02.08 |
---|---|
[프로그래머스] 괄호 회전하기 - 파이썬 (0) | 2022.01.26 |
[백준] 6609 : 로또 - Python(파이썬) (0) | 2021.08.21 |
[백준] 1780 : 종이의 개수 - Python(파이썬) (2) | 2021.08.11 |
[백준] 13305 : 주유소 - Python(파이썬) (0) | 2021.08.10 |
- Total
- Today
- Yesterday
- 스프링 프레임워크
- 네트워크
- 런칭 페스티벌
- ZNS
- 스프링 Logback
- 피움
- 팀프로젝트
- 스프링MVC
- 회고
- 우테코
- Spring
- 파이썬
- jpa
- 2차 데모데이
- dm-zoned
- 스프링 부트
- 환경 별 로깅 전략 분리
- ZNS SSD
- 백준
- java
- CI/CD
- 우테코 회고
- 3차 데모데이
- dm-zoned 코드분석
- 알림개선기
- 피움 6주차 회고
- 프로젝트
- 알림기능개선기
- 8주차 회고
- 5주차 회고
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |