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); } } |
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][Java] 위장 (0) | 2019.04.03 |
---|---|
[프로그래머스][Java] 전화번호 목록 (0) | 2019.04.03 |
[프로그래머스][Java] 더 맵게 (0) | 2019.03.22 |
[프로그래머스][Java] 쇠막대기 (0) | 2019.03.22 |
[프로그래머스][Java] 프린터 (0) | 2019.03.20 |