• Home
  • About
    • on Weekend photo

      on Weekend

      𝙎𝙩𝙪𝙙𝙮𝙞𝙣𝙜

    • Learn More
    • Instagram
    • Github
  • Archive
    • All Posts
    • All Tags
    • All Categories
  • Categories
    • Problem Solving
    • TIL
    • Study
    • Etc
    • 필사
  • Projects

[프로그래머스] 2019 KAKAO BLIND RECRUITMENT 오픈채팅방

31 Mar 2021

문제

링크

uid의 변경 내역을 갖고 있다가, 최종 uid와 닉네임의 매칭에 따라 채팅방 메시지를 출력합니다.

접근방식

id와 nickname을 매치하는 딕셔너리와 uid와 command 배열을 갖는 출력대기 배열을 생성하여, 마지막에 출력대기 배열을 순회하며 각 uid의 최종 닉네임과 command를 함께 출력해주었습니다.

단계

  1. 파싱 : record를 순회하며 command, id, nickname으로 파싱
  2. command에 따라 동작을 분리
    1. Enter : idMath 딕셔너리 업데이트 + 출력대기
    2. Change : idMatch 딕셔너리 업데이트
    3. Leave : 출력대기
  3. 출력대기(inouts) 배열을 순회하며 uid에 따른 최종 닉네임을 기반으로 result 생성

답 코드


def solution(record):
    answer = []

    # id와 nickname을 매치하는 딕셔너리입니다.
        # Enter : 딕셔너리 생성
        # Change : value 수정
    idMatch = {}
    
    # 출력을 위한 딕셔너리로, command와 출력문을 갖습니다.
    commPrint = {}
    commPrint["Enter"] = "님이 들어왔습니다."
    commPrint["Leave"] = "님이 나갔습니다."
    
    # 출력대기를 위한 배열로, [uid, command]들을 갖게 됩니다.
    inouts = [] # 이후 inouts을 순회하며 uid에 따른 최종 닉네임을 기반으로 result를 생성합니다.
    
    for rec in record :
        
        # 1. 파싱 : command id nickname
        recArr = rec.split()
        command = recArr[0]
        uid = recArr[1]
        nickname = ''
        
        # 2. command에 따라 동작을 분리
            # Enter : idMatch 딕셔너리 업데이트 + 출력대기(inouts)
            # Change : idMatch 딕셔너리 업데이트
            # Leave : 출력대기(inouts)
        if command in ["Enter", "Change"] :
            nickname = recArr[2]
            idMatch[uid] = nickname # 딕셔너리 업데이트
            
        if command in ["Enter", "Leave"] :
            inouts.append([uid, command]) # 출력대기
    
    # inouts을 순회하며 uid에 따른 최종 닉네임을 기반으로 result를 생성합니다.
    for uid, command in inouts :
        answer.append(idMatch[uid]+commPrint[command])
        
    return answer


problem_solvingpython Share Tweet +1