티스토리 뷰

문제 풀러 가기!

난이도는 레벨 2이고 그렇게 어렵지는 않은 문제였습니다. 제일 중요한건 입력값이 10만가까이 주어지기 때문에 O(n)으로 끝내야합니다. n 제곱으로 가는 순간 시간 초과 뜰겁니다. 그래서 저는 파이썬의 가장 큰 장점이라고 생각하는 dictionary로 문제를 풀었습니다. 제가 알기로 파이썬의 dictionary가 Hash Table로 알고 있거든요. 그래서 키값으로 접근시 시간 복잡도가 O(1)로 알고 있습니다. 주소값으로 접근하는 것이니까요. 문제의 흐름을 보면 최종적으로 닉네임이 변경된 이후에 채팅창에 보이는 enter와 leave를 출력해달라고 하고 있어요. 그래서 마지막까지 닉네임이 변경된 것을 dictionart에 반영한 뒤에 이를 이용하여 id를 순회하면서 answer에 하나씩 append해주면 됩니다. append로 O(1)이니까 최대한 시간복잡도를 줄이는게 이 문제의 핵심입니다. 그래서 제 코드는 아래와 같아요.

def solution(record):

    roc = []
    dic = {}
    for r in record: # 처음 순회하면서 바뀐 닉네임과 id를 dic에 기록
        rs = r.split(" ")
        if rs[0] != "Leave":
            dic[rs[1]] = rs[2]
        roc.append((rs[0], rs[1]))

    answer = []
    for r in roc: # 바뀐 닉네임이 dic에 전부 반영이 되었으면, Enter와 Leave에 따라서 answer에 문제 출력양식으로 넣어줌
        behave, i_d = r
        if behave == "Enter":
            answer.append(f"{dic[i_d]}님이 들어왔습니다.")
        elif behave == "Leave":
            answer.append(f"{dic[i_d]}님이 나갔습니다.")

    return answer


if __name__ == "__main__":
    print(solution(["Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"]))

간단했습니다.

이후에는 이문제를 코틀린으로 풀어볼게요