알고리즘

파이썬 / 프로그래머스 / 오픈채팅방

snowfield 2021. 6. 1. 19:25

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

 

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

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

programmers.co.kr


내가 푼 풀이

요즘 너무 게으른 거 같아서 1일 1 알고리즘... 다시 도전...!

친구의 추천으로 풀게 된 문제인데, 레벨 2여서 비교적 빠른 시간 내에 쉽게 풀 수 있었던 문제이다.

파이썬의 dictionary를 이용해서 유저의 아이디를 key ,  닉네임을 value로 두어서 푼 문제이다.

def solution(record):
    answer = []
    user_dict= {}
    for i in range(len(record)):
        func = record[i].split(' ')[0]
        user_id = record[i].split(' ')[1]
        if func != "Leave":
            name = record[i].split(' ')[2]
            user_dict[user_id] = name
    for i in range(len(record)):
        func = record[i].split(' ')[0]
        user_id = record[i].split(' ')[1]
        if func == "Enter":
            answer.append(user_dict[user_id]+"님이 들어왔습니다.")
        elif func == "Leave":
            answer.append(user_dict[user_id]+"님이 나갔습니다.")
        else :
            continue

    return answer

다른 사람 풀이

이 풀이 보고 솔직히 놀랐다.. 난 19줄로.. 해결했는데.. 2줄로... 풀다니... 역시..파이썬...!!  대단한거 같다..(더 공부해야지 ㅠㅠ)

startswith를 이용해서 문자열에서 처음 시작하는 걸 일치하는 지 아닌 지 판별하는 함수다.

str.startswith(str or tuple) 포멧이다. 반환 값으로는 True, False이다.

def solution(record):
    user_id = { r.split(' ')[1]:r.split(' ')[2] for r in record if not r.startswith("Leave")}
    answer = [user_id[r.split(' ')[1]]+'님이 들어왔습니다.' if r.startswith("Enter") else user_id[r.split(' ')[1]]+'님이 나갔습니다.' for r in record if not r.startswith("Change")]