오늘은 level 1이 아니라 level 2에 도전해보았다!
문제 난이도가 많이 차이나는 것 같았다. ㅠㅠ
바로 풀이법이 떠오르지 않았고 시간도 오래걸렸다.
2시간 내에 풀고 안풀리면 답을 보겠다는 다짐과 다르게
정확히 시간을 잰 건 아니였지만 아마도 2시간을 초과 했을 것이다.
그래도 끝내 풀었으니 되었다!!
문제: 프로그래머스 - (추가예정)
난이도: Level 2
내 답안
def solution(record):
nickname = {}
num_ans = 0
answer=[]
for str in record:
uid = str[6:13]
n_name = str[14:]
if (str in "Enter"):
nickname[uid] = n_name
answer[num_ans] = uid + "님이 들어왔습니다."
num_ans += 1
break
if (str in "Leave"):
answer[num_ans] = uid + "님이 들어왔습니다."
num_ans += 1
break
if (str in "Change"):
nickname[uid] = n_name
break
# uid 2 nickname
for i in len(answer):
answer[i].replace(answer[i][:7],nickname[answer[i][:7]])
return answer
글자 수를 직접 세서 코드를 작성한….
만약 user id가 각기 다른 길이를 가졌다면 못쓰는 코드다..ㅠㅠ
그리고 string과 list가 왜 이렇게 헷갈리는지…
두 대상에 대한 함수와 기능이 너무 헷갈린다.
이 부분 때문에 전에 대회에서 전처리 할 때도 애를 먹었는데 아직도 이런다.
이번에 코테 준비하면서 완전정복해야겠다.
모범답안
def solution(record):
result = []
info = {}
for r in record:
r = r.split()
#들어온 경우
if r[0] == "Enter":
result.append([r[1], "님이 들어왔습니다."])
info[r[1]] = r[2]
#나간경우
elif r[0] == "Leave":
result.append([r[1], "님이 나갔습니다."])
#변경된 경우
else:
info[r[1]] = r[2]
result = list(map(lambda x : info[x[0]]+x[1], result))
return result
확실히 깔끔하다.
특히 문자열을 바로 split해준 것은 무조건 배워야 할 점인 것 같다.
list(map(lambda()))는 정말 화려해보이는데 나도 익숙해져야 할 것 같다.
반응형
'전공 > coding test' 카테고리의 다른 글
코딩테스트5 (0) | 2022.05.31 |
---|---|
코딩테스트 4 - 포기한 문제 (0) | 2022.04.01 |
프로그래머스 2 - 더 좋은 코드란. 기본은 틀리지 말자. (0) | 2022.03.30 |
코딩테스트 1 - 런타임 에러란 (0) | 2022.03.29 |
Python 코딩테스트 준비하기 (0) | 2022.03.28 |
댓글