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

김멉덥·2023년 8월 30일
0

알고리즘 공부

목록 보기
87/171
post-thumbnail
post-custom-banner

문제

프로그래머스 2019 KAKAO BLIND RECRUITMENT


코드 구현

def solution(record):
    answer = []

    # Enter / Leave / Change
    # uid
    # 닉네임

    result = []
    nickname_dict = dict()

    for rec in record:
        record_list = list(rec.split(" "))
        if (record_list[0] == "Enter"):
            nickname_dict[record_list[1]] = record_list[2]
            ans_str = record_list[1] + "님이 들어왔습니다."
            result.append(ans_str)
        if (record_list[0] == "Change"):
            nickname_dict[record_list[1]] = record_list[2]
        if (record_list[0] == "Leave"):
            ans_str = record_list[1] + "님이 나갔습니다."
            result.append(ans_str)

    for i in result:
        uid = list(i.split("님"))[0]
        ans = i.replace(uid, nickname_dict.get(uid))
        answer.append(ans)

    return answer

풀이

  • 유저 아이디에 따라서 닉네임이 계속 바뀌어야 하므로 result 배열에는 들어오고 나가는 내용을 닉네임이 아닌 유저 아이디로 기록해놓고, 유저 아이디별 닉네임을 사전으로 저장한 뒤, 최종적으로 replace를 통해 모든 유저 아이디에 따른 닉네임으로 변경해준다.

What I learned

깔끔한 정답코드라고 생각된다.
printer 사전을 이용한 점이 인상깊다 !

def solution(record):
    answer = []
    namespace = {}
    printer = {'Enter':'님이 들어왔습니다.', 'Leave':'님이 나갔습니다.'}
    for r in record:
        rr = r.split(' ')
        if rr[0] in ['Enter', 'Change']:
            namespace[rr[1]] = rr[2]

    for r in record:
        if r.split(' ')[0] != 'Change':
            answer.append(namespace[r.split(' ')[1]] + printer[r.split(' ')[0]])

    return answer
profile
데굴데굴 뚝딱뚝딱 개발기록
post-custom-banner

0개의 댓글