본문 바로가기

알고리즘 삽질장

[프로그래머스] 오픈채팅방

반응형


문제설명

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

 

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

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

programmers.co.kr

사고과정

  • 해쉬인 딕셔너리를 이용해야 하는 문제인 것 같았다. 그런데 입력 파라미터에서 출력결과로 어떻게 변환시켜 내뱉을지에 대한 고민이 매우 많았다.. 이런저런 시도를 해보다가 아이디어가 잘 떠오르지 않아서 구글링해서 소스코드는 보지 않고 어떤 아이디어만 사용한건지 보았다. 그래서 key는 ID로, value는 닉네임으로 하는 딕셔너리를 정의하고 Enter, Change일 때만 닉네임을 갱신해준다. 그리고 난후 다시 입력 파라미터의 for loop를 돌면서 Enter, Leave일 경우에 입력되는 ID문자열을 갱신시킨 딕셔너리의 key값에 매핑되는 value 즉, 닉네임으로 갱신시켜주었다. 그리고 Enter, Leave에 따라 '들어왔습니다', '나갔습니다' 문자열을 추가해주면 되었다.
  • 확실히 레벨 2로 올라가니 어려운 듯 했다.. 해쉬를 이정도까지 풀어본 적은 처음인 듯 하다.. 그래도 아이디어만 보고 소스코드는 구현을 직접 한 것에 만족..

풀이(스스로 못 푼 풀이)

def solution(record):
    dic = {}
    for rec in record:
        strings = rec.split(' ')
        if len(strings) == 2:
            continue
        else:
            action, u_id, name = strings
            if action == 'Enter':
                if u_id in dic.keys():
                    dic[u_id] = name
                else:
                    dic[u_id] = dic.get(u_id, name)
            if action == 'Change':
                dic[u_id] = name
                
    answer = []
    for rec in record:
        strings = rec.split(' ')
        strings[1] = dic[strings[1]]
        
        if strings[0] == 'Enter':
            answer.append(f"{strings[1]}님이 들어왔습니다.")
        elif strings[0] == 'Leave':
            answer.append(f"{strings[1]}님이 나갔습니다.")
    return answer
반응형