https://programmers.co.kr/learn/courses/30/lessons/42888
최초 오답
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 |