본문 바로가기

개발/프로그래머스

[프로그래머스 Lv.2] - 오픈채팅방 (2018 KAKAO BLIND RECRUITMENT)

 

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

 

프로그래머스

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

programmers.co.kr

 

[카누식 코드]

def solution(record):
    rec_list, rec_dict, answer = [], {}, []
    for i in record:
        rec_list.append(i.split())
    for i in rec_list:
        if i[0]!='Leave':
            rec_dict[i[1]]=i[2]
    for i in rec_list:
        if i[0] == 'Enter':
            answer.append(rec_dict[i[1]]+'님이 들어왔습니다.')
        elif i[0] == 'Leave':
            answer.append(rec_dict[i[1]]+'님이 나갔습니다.')
    
    return answer

 

1. spilt을 통해 명령어/user_id/닉네임을 구분한다.

2. 명령어가 enter & dict에 새로 추가 ->  {user_id : 닉네임}으로 새로 dict에 요소 추가

    명령어가 enter & dict에 id 존재 -> 해당아이디의 밸류를 새로운 닉네임으로 수정

    명령어가 change -> 해당 아이디의 밸류 새로운 닉네임으로 수정

     (세가지 case 모두 rec_dict[i[1]]=i[2]로 해결가능)

3. loop를 통해 record를 돌며  enter와 leave에 한해

    아이디별 딕테이션 밸류값 + 출력메세지 answer에 append

   

[다른분들 코드]

def solution(record):
    answer = []
    namespace = {}
    printer = {'Enter':'님이 들어왔습니다.', 'Leave':'님이 나갔습니다.'}
    for r in record:
        rr = r.split(' ')
        if rr[0] in ['Enter', 'Change']:
            namespace[rr[1]] = rr[2]

    for r in record:
        if r.split(' ')[0] != 'Change':
            answer.append(namespace[r.split(' ')[1]] + printer[r.split(' ')[0]])

    return answer

 

비슷하게 푸신듯