# User constructor 생성 classUser: def__init__(self, status, uid, nick): self.status = status self.uid = uid self.nick = nick defsetStatus(self, new_status): self.status = new_status defsetNick(self, new_nick): self.nick = new_nick
defsolution(record): users = [] number = 0 for m in record: # message의 시작 단어에 따라 다르게 알고리즘을 짜줌. if m.startswith("Enter"): s, u, n = m.split() if users: t = [user for user in users if user.uid == u] ifnot t: c = User(s, u, n) users.append(c) else: t[0].setStatus("Enter") t[0].setNick(n) else: c = User(s, u, n) users.append(c) elif m.startswith("Leave"): s, u = m.split() t = [user for user in users if user.uid ==u] if t: t[0].setStatus("Leave") else: s, u, n = m.split() t = [user for user in users if user.uid == u] if t: t[0].setNick(n) # 모든 메세지를 통해 유저들을 최신화 시킨 뒤에 output answer생성 answer = [] for m in record: if m.startswith("Enter"): s, u, n = m.split() t = [user for user in users if user.uid == u] nn = t[0].nick output = "{}님이 들어왔습니다.".format(nn) answer.append(output) elif m.startswith("Leave"): s, u = m.split() t = [user for user in users if user.uid == u] nn = t[0].nick output = "{}님이 나갔습니다.".format(nn) answer.append(output) return answer
defsolution(record): users = [] number = 0 for m in record: if m.startswith("Enter"): s, u, n = m.split() if users: t = [user for user in users if user['uid'] == u] ifnot t: c = {'status':s, 'uid':u, 'nick':n} users.append(c) else: t[0]['status'] = s t[0]['nick'] = n else: c = {'status':s, 'uid':u, 'nick':n} users.append(c) elif m.startswith("Leave"): s, u = m.split() t = [user for user in users if user['uid'] == u] if t: t[0]['status'] = "Leave" else: s, u, n = m.split() t = [user for user in users if user['uid'] == u] if t: t[0]['nick'] = n answer = [] for m in record: if m.startswith("Enter"): s, u, n = m.split() t = [user for user in users if user['uid'] == u] nn = t[0]['nick'] output = "{}님이 들어왔습니다.".format(nn) answer.append(output) elif m.startswith("Leave"): s, u = m.split() t = [user for user in users if user['uid'] == u] nn = t[0]['nick'] output = "{}님이 나갔습니다.".format(nn) answer.append(output) return answer
그런데… 이것도 안 풀린다!! 도대체 25번 문제에 얼마나 많은 레코드들이 들어있는 것인지?
어떻게 해야 더 빨리 할 수 있지??
풀이과정 3
그래서 결국 참고하게 된 다른 분의 코드를 약간 수정한 버전..
결국 ‘마지막’에 어떻게 nick이 남는지가 중요했고 그냥 하나의 dictionary에다가 dict[uid] = nickname로 형태를 정하고 Enter와 Change일 때마다 계속해서 덮어씌우면 되는 것이었다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
defsolution(record): dic = {} answer = [] record = [i.split(' ') for i in record] for i in record: if i[0] == "Change"and i[1] in dic: dic[i[1]] = i[2] elif i[0] == "Enter": dic[i[1]] = i[2] for j in record: if j[0] == "Enter": answer.append("{}님이 들어왔습니다.".format(dic[j[1]])) elif j[0] == "Leave": answer.append("{}님이 나갔습니다.".format(dic[j[1]])) return answer