![[프로그래머스] 오픈채팅방 (python)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpSfEe%2FbtsHVuRi5Qe%2FtHHOqoYJxXHt35DgREaut1%2Fimg.jpg)
https://school.programmers.co.kr/learn/courses/30/lessons/42888
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
이 문제에서는 Phase가 두 개로 나뉜다.
- 오픈채팅방에 입장한 후 이름이 변경될 수 있다. 이를 반영해야 한다.
- 오픈채팅방의 모든 기록이 처리된 후 최종적인 결과를 보기 원한다.
특히 이 코드는 딕셔너리를 사용했다.
딕셔너리는 중복되는 key를 허용하지 않기 때문에 같은 key(uid)로 새로운 이름이 들어오면 기존 이름은 새로운 이름으로 대체된다.
오픈채팅방에서 같은 uid로 새로운 이름이 들어오게 된다면, 이전 이름은 없어지고 새로운 이름으로 변경되는 것이다.
딕셔너리의 특징으로 오픈채팅방의 이름 부분을 구현할 수 있어 이 자료구조를 사용하는 것이 도움이 될 것이다.
def solution(record):
answer = []
userinfo = {} # key: uid, value: name
# Phase 1: userinfo 구성 (이름 변경 반영하기 위함)
for rc in record:
# record 배열에서 원소 분리
parts = rc.split() # 0: command, 1: uid, 2: name
# 딕셔너리에 유저 정보 추가
if parts[0] in ['Enter', 'Change']:
userinfo[parts[1]] = parts[2]
# Phase 2: 구성된 userinfo 출력
for rc in record:
# record 배열에서 원소 분리
parts = rc.split() # 0: command, 1: uid, 2: name
name = userinfo[parts[1]]
if parts[0] == "Enter":
answer.append(f"{name}님이 들어왔습니다.")
elif parts[0] == "Leave":
answer.append(f"{name}님이 나갔습니다.")
return answer
references
https://school.programmers.co.kr/learn/courses/30/lessons/12936
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'CSE > 알고리즘 (algorithm)' 카테고리의 다른 글
[Goorm level] 회전 배열 (python) (0) | 2024.06.11 |
---|---|
[프로그래머스] 124 나라의 숫자 (python) (0) | 2024.06.11 |
[프로그래머스] 구명보트 (python) (0) | 2024.06.11 |
[프로그래머스] 스킬트리 (python) (0) | 2024.06.11 |
[프로그래머스] 기지국 설치 (python) (0) | 2024.06.10 |
컴퓨터 전공 관련, 프론트엔드 개발 지식들을 공유합니다. React, Javascript를 다룰 줄 알며 요즘에는 Typescript에도 관심이 생겨 공부하고 있습니다. 서로 소통하면서 프로젝트 하는 것을 즐기며 많은 대외활동으로 개발 능력과 소프트 스킬을 다듬어나가고 있습니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!