ALGORITHM/PROGRAMMERS
[프로그래머스] 큰 수 만들기
0298
2021. 8. 2. 22:03
https://programmers.co.kr/learn/courses/30/lessons/42883
코딩테스트 연습 - 큰 수 만들기
programmers.co.kr
2021-08-02
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
|
import java.util.*;
class Solution {
public String solution(String number, int k) {
int[] num = new int[number.length()];
for(int i = 0; i < number.length(); i++) num[i] = Character.getNumericValue(number.charAt(i));
StringBuilder answer = new StringBuilder();
int len = number.length() - k;
int idx = -1;
while(true) {
int max = -987654321;
boolean flag = false;
for(int j = idx+1; j <= number.length()-len; j++) {
if(max < num[j]) {
flag = true;
max = num[j];
idx = j;
}
}
if(flag) answer.append(max);
len--;
if(!flag || len == 0) {
for(int p = idx+1; p < idx+1+len; p++) {
answer.append(num[p]);
}
break;
}
}
return answer.toString();
}
}
|
cs |
#문제풀이
힌트를 살짝 얻어서 풀었다. 현재 기준에서 k만큼을 빼고 하나 뽑을 수 있다고 가정하고 푼 방식이다.
기준 범위내에서 가장 큰 수를 뽑고, 뽑은 수의 다음 index 부터 length-남은k만큼까지에서 또 가장 큰 수를 뽑는 것을 반복하면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import java.util.*;
class Solution {
public String solution(String number, int k) {
int[] num = new int[number.length()];
int len = number.length() - k;
for(int i = 0; i < number.length(); i++) num[i] = Character.getNumericValue(number.charAt(i));
StringBuilder sb = new StringBuilder();
Stack<Integer> stack = new Stack<>();
for (int tmp : num) {
while (!stack.isEmpty() && stack.peek() < tmp && k-- > 0) {
stack.pop();
}
stack.push(tmp);
}
for(int i = 0; i < len; i++) sb.append(stack.get(i));
return sb.toString();
}
}
|
cs |
막연하게 스택으로도 되겠지, 생각하고 말았는데 푼 사람이 있어서 참고 하여 풀어봤다.