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

 

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

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

programmers.co.kr


최초 오답

def solution(record):
    answer = []
    temp={}
    
    for i in record:        
        if len(i.split()) > 2:
            temp[i.split()[1]] = i.split()[2]
            
    for i in record:
            for j in temp:
                if i.split()[1] == j:
                        if i.split()[0]=='Enter':
                            answer.append(f'{temp[j]}님이 들어왔습니다.')
                            
                            
                        elif i.split()[0] =='Leave':
                            answer.append(f'{temp[j]}님이 나갔습니다.')

    return answer

 

이렇게 하니까 특정케이스에서 자꾸 시간초과가 나더라. 

보통 시간초과가 나는이유는 반복문의 잦은 사용이니까 반복문을 없애려고 시도를 해봤다.

근데 처음에는 어떤식으로 해야할지 감이 안잡혔다. 그래서 생각한게 for문을 돌때마다 split으로 나눠야겠다 였다

그래서 나온 정답은 다음과같다.
                            
    
    


 

 

def solution(record):
    answer = []
    temp={}
    status={}
    for i in record:        
        if len(i.split()) > 2:                               //이 처리를 안해주면 leave때문에 틀린 케이스가 발생한다 

        temp[i.split()[1]] = i.split()[2]               //왜냐하면 leave는 i.split[2]가 존재하지 않기 때문에
            
            
    for i in record:
        tem = i.split()
        if tem[0]=='Enter':
            answer.append(f'{temp[tem[1]]}님이 들어왔습니다.')
        if tem[0]=='Leave':
            answer.append('%s님이 나갔습니다.'%temp[tem[1]])
    
    return answer

 

하나는 f-string으로 하나는 %서식문자로 작성해봤다.

코드도 훨씬 짧아지고 보기도 더 쉽다.


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

가장 좋아요를 많이받은 답변이다. 내 코드랑 거의 유사하다. 사실 내가 나은거같기도.


 

 

근래에 풀어본 레벨2 문제중에 제일 쉬웠던거같다

이상

'취준 > 프로그래머스' 카테고리의 다른 글

기능개발 - 파이썬  (0) 2022.05.30
124 나라의 숫자 - 파이썬  (0) 2022.05.30
실패율 - 파이썬  (0) 2022.05.24
체육복 - 파이썬  (0) 2022.05.22
소수만들기 - 파이썬  (0) 2022.05.21

+ Recent posts