[algorithm] 2019 Kakao Blind Recruitment 1차 - 오픈 채팅방

2021. 9. 9. 23:07Algorithm

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/42888

 

코딩테스트 연습 - 오픈채팅방

오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오

programmers.co.kr

  • 정답률: 59.91%

- 채팅방에 누군가 들어오고 나갈 때,  "[닉네임]님이 들어왔습니다" , "[닉네임]님이 나갔습니다." 가 출력된다.

- 닉네임은 중복이 가능하다.

- 채팅방에서 닉네임을 변경하는 방법은 두 가지이다.

  • 채팅방을 나간 후, 새로운 닉네임으로 다시 들어간다.
  • 채팅방에서 닉네임을 변경한다.

- 사용자가 이름을 바꾸면 변경사항이 과거 출력내용에도 반영된다. (나가서 변경한 사람도)

 

 

2. 풀이

def solution(record):
    namedict={}
    inoutlist =[]
    for line in record:
        li = line.split(" ")
        if li[0]=="Enter":
            namedict[li[1]]=li[2]
            inoutlist.append((0,li[1]))
        elif li[0]=="Leave":
            inoutlist.append((1,li[1]))
        else:
            namedict[li[1]]=li[2]
    
    #print(inoutlist)
    answer = []
    for option,id in inoutlist:
        if option==0:
            answer.append("{}님이 들어왔습니다.".format(namedict[id]))
        else:
            answer.append("{}님이 나갔습니다.".format(namedict[id]))
    
    
    return answer

사용자의 닉네임이 어느 시점에 바뀌든 결과적으로 마지막에 방장이 보는 내용에는 최종 닉네임으로  보여진다.

들어오고 나오는 것에 대한 기록은  변하지 않는 값인 사용자의 ID 로 기록한다.

사용자 ID -> 닉네임 간 딕셔너리를 만들고 이름이 바뀌면 반영해준다.

마지막으로 출력포멧을 만들 때, 최종 닉네임을 반영한다.

 

3. 후기

2019 blind 1차 테스트 첫번째 문제로 간단한문제였다.