오픈채팅방
카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다.
신입사원인 김크루는 카카오톡 오픈 채팅방을 개설한 사람을 위해, 다양한 사람들이 들어오고, 나가는 것을 지켜볼 수 있는 관리자창을 만들기로 했다. 채팅방에 누군가 들어오면 다음 메시지가 출력된다.
def solution(record):
answer = []
members = {}
for i in record:
a = list(map(str, i.split()))
if a[0] == 'Leave':
continue
else:
members[a[1]] = a[2]
for i in record:
a = list(map(str, i.split()))
if a[0] == 'Leave':
answer.append(members[a[1]] + "님이 나갔습니다.")
elif a[0] == 'Enter':
answer.append(members[a[1]] + "님이 들어왔습니다.")
return answer
이건 어렵지 않았지만 배열에 어떻게 동적인 문자열을 더해줄지 고민을 상당히 많이 한 문제이다.
(answer.append(members[a[1]] + "님이 들어왔습니다.")
이부분이다)
문제 설명
어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.
예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다.
문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.
def solution(number, k):
answer = []
cnt = 0
for i in number:
while answer and i > answer[-1] and cnt < k:
answer.pop(-1)
cnt+= 1
answer.append(i)
while cnt < k:
answer.pop(-1)
cnt += 1
return ''.join(answer)
이건 문제 이해하는데 한참 걸렸다. 그래서 큰수를 어떻게 만들라는거야? 라고 생각했는데
음 그냥 계속해서 앞에 작은 수가 있다면 지워주기만 하면 됐다.
그리고 자꾸만 인덱싱에서 에러가 나서 예외처리를 잘 해줘야했다.
이 문제를 풀고나서 다른사람의 풀이를 보고 와~ 했던게 있다.
만약 10000 이 주어지고 2개를 지워야한다는 조건이 주어졌을 때, 나는 그 예외처리를
while cnt < k:
answer.pop(-1)
cnt += 1
이렇게 했다. 두번 돌면서 끝에 숫자 지우기!
근데 인덱싱으로 깔끔하게 지워버리는 사람이 많더라...!!
if (k-cnt) != 0:
answer = answer[:-(k-cnt)]
이렇게 단순한 작업일땐 인덱싱처리를 고려해보는게 좋을 것 같다!