bit가 눈 앞에서 왔다갔다

Py) 프로그래머스 42883 본문

카테고리 없음

Py) 프로그래머스 42883

헬린인형 2022. 1. 20. 00:57

https://programmers.co.kr/learn/courses/30/lessons/42883

 

코딩테스트 연습 - 큰 수 만들기

 

programmers.co.kr

 

코드 보러 다니면서 알고리즘 공부 방식을 좀 바꾸기로 했다.

1. 코드 보고 그대로 외워서 풀지 말 것

2. 응용해서 내 코드로 소화시켜서 풀 것

나는 사고력이 약해서 이렇게 해야할 것 같다.

어차피 시간 오래 걸리는거 조금 더 힘들게 해서 오래 걸리자.

 

내가 푼 코드

def calc(cnum, k, i):
    global store

    if k == 0:
        if store < int(str(cnum)):
            store = int(str(cnum))
        return

    k-=1

    del cnum[i]
    for j in range(0,len(cnum)):
        calc(cnum, k, j)
    # 리스트의 인덱스를 하나씩 움직이며 값을 지워나감


def solution(number, k):
    answer = ''
    global store
    store = -1

    lnum = list(number)
    i=0
    calc(lnum, k, i)

    answer = store
    return str(answer)

print(solution(number="1924", k=2))
del cnum[i]

에서 인덱스 범위를 벗어난다는 에러 발생

그거 말고 틀린 것도 많을 것 같지만, 내일 9시 출근 아니었으면 진짜 저거 손으로 다 써서라도 알아냈다ㅠ 진짜ㅠㅠ7시에 일어나야되니까 참는다ㅠ

def solution(number, k):
    answer = ''
    # 아이디어 - stack에 넣어주고, stack에 들어있는 수가 작으면 빼버린다
    stack = [number[0]]

    for i in number[1:]:
        while stack and k>0 and stack[-1]<i:
            stack.pop()         # 빼버림
            k -= 1
        stack.append(i)


    answer = ''.join(stack)
    return answer

왜ㅠ

쭉 통과 뜨다가 마지막 하나 실패 뜨는거 보고 신나다가 철렁함

def solution(number, k):
    answer = ''
    # 아이디어 - stack에 넣어주고, stack에 들어있는 수가 작으면 빼버린다
    stack = [number[0]]

    for i in number[1:]:
        while stack and k>0 and stack[-1]<i:
            stack.pop()         # 빼버림
            k -= 1
        stack.append(i)

    if k>0:
        stack = stack[:-k]

    answer = ''.join(stack)
    return answer

k>0인 경우가 뭐가 있을까..

4321같이 stack의 top이 number의 그 다음 수보다 계속 커버리면 k가 줄어들수가 없었다..

 

*

itertools.combination

+ itertools.. 대박이다 진짜.. (이 문제는 itertools 쓰면 런타임 걸린다고)

https://docs.python.org/ko/3/library/itertools.html

 

반응형
Comments