알고리즘 풀이/프로그래머스

[프로그래머스][Java] 큰 수 만들기

배게 2019. 3. 22. 07:05
728x90

stack클래스의 예외 옵션 때문에


어거지로 만든 쓰파게티코드



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import java.util.*;

class Solution {
    public String solution(String number, int k) {
        ArrayList<Character> arr = new ArrayList<Character>();
        int index = 1;

        arr.add(number.charAt(0));
        Character prev=arr.get(arr.size()-1);


        while(k>0 && index<number.length()){
            Character num = number.charAt(index);
            while(prev<num && k>0){
                arr.remove(arr.size()-1);
                k--;
                // System.out.println("발견, k값 : "+k);
                if(arr.size()>0){
                    prev=arr.get(arr.size()-1);
                }

                else break;
            }

            arr.add(num);
            prev = num;
            index++;
        }

//         System.out.println("index : " +index);
//         System.out.println("number_length : " +number.length());

        StringBuilder sb = new StringBuilder();


        for(int i=0; i<arr.size()-k;i++){
            sb.append(arr.get(i));
        }

        for(int i=index; i<number.length(); i++){
            // System.out.println(number.charAt(i));
            sb.append(number.charAt(i));
        }


        String answer = sb.toString();
        // System.out.println(answer+ " " + k );
        return answer;
    }
}



브레인의 정갈한 코드


char배열로 최종적으로 return해줄 그릇을 선언함


stack을 이용해 앞의 숫자보다 클 경우 pop시켜줌


큰 수의 조건에 맞지 않을 경우 계속 push해서 숫자 만들어줌


stack을 이용해 char배열에 넣고 String으로 변환


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import java.util.*;
class Solution {
    public String solution(String number, int k) {
        char[] result = new char[number.length() - k];
        Stack<Character> stack = new Stack<>();

        for (int i=0; i<number.length(); i++) {
            char c = number.charAt(i);
            while (!stack.isEmpty() && stack.peek() < c && k-- > 0) {
                stack.pop();
            }
            stack.push(c);
        }
        for (int i=0; i<result.length; i++) {
            result[i] = stack.get(i);
        }
        return new String(result);
    }
}