프로그래머스 오픈채팅방 / 큰 수 만들기 (Python)

박노정·2021년 6월 13일
0

알린이의 알고리즘

목록 보기
4/15
post-custom-banner

오픈채팅방

오픈채팅방
카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다.
신입사원인 김크루는 카카오톡 오픈 채팅방을 개설한 사람을 위해, 다양한 사람들이 들어오고, 나가는 것을 지켜볼 수 있는 관리자창을 만들기로 했다. 채팅방에 누군가 들어오면 다음 메시지가 출력된다.

풀이

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)]

이렇게 단순한 작업일땐 인덱싱처리를 고려해보는게 좋을 것 같다!

profile
성장스택 쌓고있는 개발자🏋
post-custom-banner

0개의 댓글