상세 컨텐츠

본문 제목

[coding_test]큰 수 만들기

coding/coding_test

by golduny_zoo 2021. 6. 9. 16:34

본문

728x90

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

 

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

 

programmers.co.kr

아 진짜.. 날이갈 수록 모르는건 많다는 걸 너무 느낀다...

작은 수를 빼면 되는 거 아닌가? 라고 생각하였다. 

하지만 문제를 자세히 보니 순서대로 나열이 되어있는 상태로 빼는 수이므로 작은 수만 빼서는

답이 나오지 않는 다는 것을 예제 3번에서 확인했다. 

맥스값을 앞에 넣고 다시 맥스값을 다음 수에 넣는 방식을 생각했으나,

맥스값이 맨뒤에 있을 경우 문제를 풀려고 노력했으나,

재귀함수에서 함수값을 가져오는 오류가 생겼다...

def max_number(number_list, k):
    result =""

    for i,j in enumerate(number_list):
        if j == max(number_list) and i <= k:
            result += j
            k -= i
            number_list = number_list[i+1:]
            print(result)
            if k != 0:
                return result+max_number(number_list, k)
            else :
                return result
        elif j == max(number_list) :
            print(i,j)
            print(number_list[:i])
            result = ''.join(number_list[i:])
            number_list= number_list[:i]
            print("len",len(result))
            n = n-len(result)
            return max_number(number_list, k) + result

1시간동안 잡고 있었으나, 풀리지 않아 다른사람의 풀이를 보며 다시 배워보자 라고 생각했고,

스택을 이용하여 풀이를 푼 사람의 풀이를 보고 해석하며 나의 것으로 만들려고 노력한 결과..

정답이 나왔다ㅠㅠㅠㅠㅠ

number, k = "1000", 1
def solution(number, k):
    result =[]
    for i in number:
        while result and result[-1] < i:
            if k > 0:
                result.pop()
                k -= 1
            else:
                break
        result.append(i)
    while len(result) > len(number)-k:
        result.pop()
    return "".join(result)
solution(number, k)

'coding > coding_test' 카테고리의 다른 글

[coding-test] 네트워크  (0) 2021.07.21
[codint_test]짝지어 제거하기  (0) 2021.06.09
[coding_test]크레인 인형뽑기  (0) 2021.05.31
[coding_test]기능개발  (0) 2021.05.25
[coding_test]더 맵게  (0) 2021.05.24

관련글 더보기