코딩 테스트/Level 2

26. 큰 수 만들기

컴닥 2020. 8. 9. 10:21
반응형

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

큰 수 만들기
탐욕법(Greedy)
3568명 완료

 

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

 

programmers.co.kr

파이썬

def solution(number, k):
    count, i = 0, 0
    while i < len(number) - 1:
        if number[i] < number[i+1]:
            number = number[:i] + number[i+1:]  # 이 부분이 문제...
            count += 1
            if i > 0:
                i -= 1
            if count == k:
                return number
        else:
            i += 1
    return number[:len(number) - k]
테스트 1 〉	통과 (0.04ms, 10.8MB)
테스트 2 〉	통과 (0.04ms, 10.7MB)
테스트 3 〉	통과 (0.07ms, 10.7MB)
테스트 4 〉	통과 (0.12ms, 10.7MB)
테스트 5 〉	통과 (0.35ms, 10.8MB)
테스트 6 〉	통과 (9.22ms, 10.8MB)
테스트 7 〉	통과 (37.19ms, 10.9MB)
테스트 8 〉	통과 (194.71ms, 11.1MB)
테스트 9 〉	통과 (8.19ms, 11.9MB)
테스트 10 〉	통과 (6570.72ms, 13.2MB)
테스트 11 〉	통과 (0.04ms, 10.6MB)
테스트 12 〉	통과 (0.04ms, 10.7MB)

왠지 특이하게 풀고 싶어서 문자열로 만들었더니 너무 느립니다.
스택을 쌓아봅니다. 
코드도 짧고 날아다닙니다. 정상적으로 풀어야겠습니다. 반성합니다. ㅠ,.ㅠ 

def solution(number, k):
    stack = []
    for each in number:
        while stack and k > 0 and stack[-1] < each:
            stack.pop()
            k -= 1
        stack.append(each)
    return ''.join(stack[:len(stack) - k])
테스트 1 〉	통과 (0.04ms, 10.7MB)
테스트 2 〉	통과 (0.05ms, 10.7MB)
테스트 3 〉	통과 (0.06ms, 10.7MB)
테스트 4 〉	통과 (0.13ms, 10.7MB)
테스트 5 〉	통과 (0.20ms, 10.6MB)
테스트 6 〉	통과 (2.92ms, 10.8MB)
테스트 7 〉	통과 (6.75ms, 11.1MB)
테스트 8 〉	통과 (16.67ms, 11.4MB)
테스트 9 〉	통과 (38.30ms, 16.1MB)
테스트 10 〉	통과 (97.03ms, 15MB)
테스트 11 〉	통과 (0.04ms, 10.7MB)
테스트 12 〉	통과 (0.03ms, 10.7MB)

JS

function solution(number, k) {
    let stack = []
    for (let each of number) {
        while (k > 0 && stack.length > 0 && stack[stack.length-1] < parseInt(each)) {
            stack.pop()
            k--
        }
        stack.push(parseInt(each))
    }
    return stack.slice(0, number.length-k).join("")
}
테스트 1 〉	통과 (1.72ms, 37.4MB)
테스트 2 〉	통과 (1.64ms, 37.4MB)
테스트 3 〉	통과 (1.70ms, 37.3MB)
테스트 4 〉	통과 (1.96ms, 37.8MB)
테스트 5 〉	통과 (2.02ms, 37.7MB)
테스트 6 〉	통과 (6.42ms, 37.8MB)
테스트 7 〉	통과 (11.08ms, 39.8MB)
테스트 8 〉	통과 (13.68ms, 40.9MB)
테스트 9 〉	통과 (39.70ms, 52.7MB)
테스트 10 〉	통과 (42.07ms, 50.5MB)
테스트 11 〉	통과 (1.62ms, 37.7MB)
테스트 12 〉	통과 (1.90ms, 37.6MB)

Java

class Solution {
    public String solution(String number, int k) {
        var result = new StringBuilder();
        for (var each : number.toCharArray()) {
            while (result.length() > 0 && k > 0 && result.charAt(result.length() - 1) < each) {
                k--;
                result.deleteCharAt(result.length() - 1);
            }
            result.append(each);
        }
        return result.substring(0, Math.min(result.length(), result.length() - k));
    }
}
반응형