Programmers Code/Level 2

[Programmers] level2 - 오픈채팅방 (Python) : 2019 KAKAO BLIND RECRUITMENT

NIMHO 2022. 9. 6. 23:29
728x90

▶오픈채팅방 (Python) : 2019 KAKAO BLIND RECRUITMENT (level 2)

문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제

  • record는 다음과 같은 문자열이 담긴 배열이며, 길이는 1 이상 100,000 이하이다.
  • 다음은 record에 담긴 문자열에 대한 설명이다.
    • 모든 유저는 [유저 아이디]로 구분한다.
    • [유저 아이디] 사용자가 [닉네임]으로 채팅방에 입장 - "Enter [유저 아이디] [닉네임]" (ex. "Enter uid1234 Muzi")
    • [유저 아이디] 사용자가 채팅방에서 퇴장 - "Leave [유저 아이디]" (ex. "Leave uid1234")
    • [유저 아이디] 사용자가 닉네임을 [닉네임]으로 변경 - "Change [유저 아이디] [닉네임]" (ex. "Change uid1234 Muzi")
    • 첫 단어는 Enter, Leave, Change 중 하나이다.
    • 각 단어는 공백으로 구분되어 있으며, 알파벳 대문자, 소문자, 숫자로만 이루어져있다.
    • 유저 아이디와 닉네임은 알파벳 대문자, 소문자를 구별한다.
    • 유저 아이디와 닉네임의 길이는 1 이상 10 이하이다.
    • 채팅방에서 나간 유저가 닉네임을 변경하는 등 잘못 된 입력은 주어지지 않는다.
728x90

입출력 예제

 

풀이

가장 먼저 dictionary를 하나 생성했다. (user)

record별로 들어오는 값들을 분리시킨 후 0번째 index값이 Enter인지 Change인지 비교했다.

 

그다음 user dictionary안에 id와 이름을 key, value로 넣어주었다.

 

출력해줄 땐 user id (key값)을 이용해서 해당하는 이름을 출력해주었다.

이때 id를 key값으로 주는 이유는 동일한 이름이 존재할 수도 있기 때문에, id를 기준으로 비교해주기 위해서다.

def solution(record):
    answer = []
    user = {}
    for s in record:
        re = list(s.split())
        if re[0] == 'Enter':
            user[re[1]] = re[2]
        elif re[0] == 'Change':
            user[re[1]] = re[2]
    for s in record:
        re = list(s.split())
        if re[0] == 'Enter':
            answer.append('%s님이 들어왔습니다.' %user[re[1]])
        elif re[0] == 'Leave':
            answer.append('%s님이 나갔습니다.' %user[re[1]])
    return answer

효율성 검사가 없는 문제라서, 처음부터 하나씩 비교하면서 해줘도 충분히 정답이 나올 것이다.

728x90