본문 바로가기

알고리즘/프로그래머스

[Python] 오픈 채팅방

https://school.programmers.co.kr/learn/courses/30/lessons/42888

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

  • 첫 번째 풀이(실패)
from collections import defaultdict

def solution(record):
    answer = []
    user_dict = defaultdict(list)
    for i in record:
        a = i.split()
        if a[0]=='Enter':
            if a[1] not in user_dict:
                user_dict[a[1]].append([a[2],'님이 들어왔습니다.'])
            else:
                for t in user_dict[a[1]]:
                    t[0] = a[2]
        elif a[0]=='Leave':
            user_dict[a[1]].append([user_dict[a[1]][0], '님이 나갔습니다.'])
        elif a[0] == 'Change':
            for t in user_dict[a[1]]:
                t[0] = a[2]
    print(user_dict)
    return answer

아이디와 이름을 딕셔너리로 저장하여서 바로 풀려고 했지만 들어오고 나가는 순서에 대한 정보가 사라져버림.

그래서 리스트도 같이 이용하여 풀기로 했음

 

  • 두 번째 풀이(성공)
from collections import defaultdict

def solution(record):
    answer = []
    name_dict = {}
    
    record_split = [i.split() for i in record]
    # user_id의 최종 이름 저장 딕셔너리
    for i in record_split:
        if i[0] == 'Enter':
            name_dict[i[1]] = i[2]
        elif i[0] == 'Leave':
            pass
        elif i[0] == 'Change':
            name_dict[i[1]] = i[2]
    
    # 메세지 저장
    for i in record_split:
        if i[0] == 'Enter':
            answer.append(name_dict[i[1]]+'님이 들어왔습니다.')
        elif i[0] == 'Leave':
            answer.append(name_dict[i[1]]+'님이 나갔습니다.')
        elif i[0] == 'Change':
            pass
    return answer

딕셔너리에는 해당 id의 최종적인 이름만 저장해놓고 출력 메세지는 따로 저장해줌.

 

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[Python] 연속 부분 수열 합의 개수  (0) 2023.01.20
[Python] 가장 가까운 같은 글자  (0) 2023.01.16
[Python] 피로도  (0) 2023.01.12
[Python] 푸드 파이트  (0) 2023.01.09
[Python] 귤 고르기  (0) 2023.01.08