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

2026. 4. 12. 15:16·Algorithm

문제

 

 

풀이

문제를 봤을 때 들었던 생각 : 닉네임을 변경해서 모든 메세지를 출력하려면, 메세지가 나올 record만 따로 저장을 하고, change나 enter가 들어왔을 때 닉네임을 업데이트 하면 되겠구나 ! 하고 생각했다.

from collections import defaultdict

def solution(record):
    access_list = []
    member_dict = defaultdict(str)
    res = []
    
    #access_list 저장, 멤버 이름 업데이트
    for rec in record :
        parts = rec.split()
        #change, enter 경우
        if len(parts) == 3 :
            access, user_id, nickname = parts
            #user_id에 맞는 닉네임 업데이트
            member_dict[user_id] = nickname
            #enter인 경우 access_list에 추가
            if access == 'Enter' :
                access_list.append([access, user_id])
            #user_id에 맞는 닉네임 업데이트
            member_dict[user_id] = nickname
        #Leave인 경우
        else :
            access, user_id = parts
            access_list.append([access, user_id])
    
    #최종 메세지 업데이트
    for access in access_list :
        name = member_dict[access[1]]
        if access[0] == 'Enter' :
            message = f'{name}님이 들어왔습니다.'
            res.append(message)
        else :
            message = f'{name}님이 나갔습니다.'
            res.append(message)
            
    return res

 

 

풀이 로직

1. 채팅방 출입만을 저장할 access_list 생성, 멤버들을 id로 구분할 id : nickname의 키 : 값 쌍을 가지는 member_dict 생성

2. record를 처음부터 끝까지 반복 시작

3. split()을 통해 나눴을 경우, change와 enter의 경우에는 인자가 3개가 나오고, leave의 경우에는 nickname이 안들어간 2개의 인자가 나오므로, len(parts)를 통해 3개의 인자가 나오는 경우부터 조치

4. enter과 change의 경우 둘 다 member의 id에 맞는 nickname을 update하므로 member dict 먼저 업데이트

5. enter의 경우 access_list에 추가

6. len(parts)가 2이면 leave인 경우이므로, access_list에 access와 user id 추가

-> 이렇게 access리스트와 member dict 생성

7. access_list에는 그럼 enter/leave와 user_id가 들어있으므로, enter인 경우와 leave인 경우 나누어서 res 리스트에 문자열 추가

 

Github Link    ←

 

BackJoon-Programmers/프로그래머스/2/42888. 오픈채팅방 at main · jaeheonki/BackJoon-Programmers

Contribute to jaeheonki/BackJoon-Programmers development by creating an account on GitHub.

github.com

 

'Algorithm' 카테고리의 다른 글

[프로그래머스] 프렌즈4블록  (1) 2026.04.13
[프로그래머스] 마법의 엘리베이터  (2) 2026.04.13
[프로그래머스] 프로세스  (0) 2026.04.09
[프로그래머스] 피로도  (0) 2026.04.09
[프로그래머스] 주식가격  (0) 2026.04.09
'Algorithm' 카테고리의 다른 글
  • [프로그래머스] 프렌즈4블록
  • [프로그래머스] 마법의 엘리베이터
  • [프로그래머스] 프로세스
  • [프로그래머스] 피로도
uj07096
uj07096
개발블로그 시작 !
  • uj07096
    김재헌 님의 블로그
    uj07096
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • Algorithm
      • My IT
        • Article
        • Codes
      • TIL
      • My Projects N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    LSTM
    LeetCode
    DenseNet
    Tensor
    파이썬
    Faster R-CNN
    GAN
    AI
    DeepLearning
    Stack
    데이터전처리
    YOLO
    코딩테스트
    convolution
    Algorithm
    ResNet
    PyTorch
    til
    EDA
    프로그래머스
    optuna
    autoencoder
    머신러닝
    kaggle
    EfficientNet
    transfer learning
    이상치
    코테
    python
    딥러닝
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
uj07096
[프로그래머스] 오픈채팅방
상단으로

티스토리툴바