오픈 채팅방

zzwwoonn·2022년 6월 10일
0

Algorithm

목록 보기
51/71

첫 번째 코드


def solution():
    answer = []
    recordList = []

    for oneVal in record:
        recordList.append(oneVal.split())

    memberList = []
    leaveList = []

    for oneVal in recordList:
        if oneVal[0] == "Enter":
            memberList.append((oneVal[1], oneVal[2]))

        if oneVal[0] == "Leave":
            for i in range(0, len(memberList)):
                if memberList[i][0] == oneVal[1]:
                    memberList.remove(memberList[i])
                    leaveList.append(memberList[i][1])
                    break

        if oneVal[0] == "Change":
            for i in range(0, len(memberList)):
                if memberList[i][0] == oneVal[1]:
                    memberList.remove(memberList[i])
                    memberList.append((oneVal[1], oneVal[2]))
                    break

    for oneVal in recordList:
        if oneVal[0] == "Enter":
            for i in range(0, len(memberList)):
                if memberList[i][0] == oneVal[1]:
                    answer.append(str(memberList[i][1])+"님이 들어왔습니다.")
                    break

        if oneVal[0] == "Leave":
            answer.append(str(leaveList.pop(0))+"님이 나갔습니다.")
            
    return answer

입력 레코드 전부 split 하여 배열에 넣어둔다. 총 for loop 를 2번 돈다.

첫 번째 돌때는 사용자 ID와 사용자 닉네임을 저장해둔다 (변경까지)

두 번째 돌때는 이를 바탕으로 출력을 한다.

=> 런타임 에러

만약 입력 레코드가

record = ["Enter uid1234 Muzi", "Change uid1234 Muzi", "Leave uid1234", "Enter uid1234 Prodo"]

다음과 같을 때
Enter, Change 하고 나서 Change를 해야 하므로 이전에 있던 값을 지워주고 새로운 정보를 넣어준다. 하지만 이 때 memberList 배열에는 아무런 값도 없으므로 런타임 에러가 나온다.

결론적으로는 Dictionary를 써서 구현해야 한다.

두 번째 풀이

def solution(record):

    answer = []
    actions = []
    userDB = {}
    recordList = []
    
    for oneVal in record:
        recordList.append(oneVal.split())
        
    for oneVal in recordList:
        if oneVal[0] in ("Enter", "Change"):
            userDB[oneVal[1]] = oneVal[2]
        actions.append((oneVal[0], oneVal[1]))
    
    
    
    for a in actions:
        if a[0] == 'Enter':
            answer.append(f'{userDB[a[1]]}님이 들어왔습니다.')
        elif a[0] == 'Leave':
            answer.append(f'{userDB[a[1]]}님이 나갔습니다.')
        
    return answer

생각하지 못했던 부분은 사용자 ID와 닉네임을 저장해둘 때 그냥 배열이 아니라 dict를 쓴다. 왜냐하면 어차피 사용자 ID 는 고유한 값이고 바뀌지 않는다. 닉네임 변경이 있어도 키 값인 사용자 ID는 변함없다. 로직은 위의 코드와 거의? 똑같다.

0개의 댓글