본문 바로가기

알고리즘/프로그래머스

2019 KAKAO BLIND RECRUITMENT - 오픈채팅방, 파이썬

1. 문제 

 - 2019 카카오 코딩테스트 1차 1번 오픈채팅방 문제이다. 

- 난이도는 레벨 1로 추정되며 매우 쉬운 문제 

- 개선점을 기록하고자 남겨둠

 

2. 풀이

- 들어왔던 ID가 새로 들어왔을 때 그 이전 기록이 새로 들어온 닉네임으로 바뀜.

- Leave의 경우 닉네임 기록이 없음

- Change의 경우도 해당 아이디의 닉네임이 모두 새로운 닉네임으로 바뀜

- 딕셔너리에 아이디를 키로 해서 최신 닉네임으로 업데이트해준다. 

- 나중에 반복문으로 출력

 

def solution(record):
    ans = []
    dic = {}
    for i, data in enumerate(record):
        record[i] = data.split(" ")
        if record[i][0] == 'Enter' or record[i][0] == 'Change':
            dic[record[i][1]] = record[i][2]
        if record[i][0] == 'Leave' :
            record[i].append(dic[record[i][1]])
    for data in record :
        if data[0] == 'Enter' :
            ans.append(dic[data[1]] + "님이 들어왔습니다.")
        elif data[0] == 'Leave' :
            ans.append(dic[data[1]] + "님이 나갔습니다.")
    return ans

3. 개선점

- split으로 문자열을 나누고 record 배열에 다시 저장해버렸는데, 이 경우 원본 데이터의 손상이 온다. 따라서 새로운 배열에 저장했어야 함

- 딕셔너리에 저렇게 데이터를 갱신해도 되는지 모르겠다. append로 더해주고 나중에 pop으로 꺼내도 되긴 할듯. 

- 이런 문제는 10분컷 해야할듯