문제 : https://programmers.co.kr/learn/courses/30/lessons/42883?language=java
해당 문제는 Java의 StringBuilder를 활용하여 풀 수 있었다.
가장 중요한 로직은 각 탐색 범위를 지정하는 것이다.
탐색 범위의 시작은 0(...전체길이 - k) 부터 시작한다.
그리고 실제 탐색은 이전에 선택한 idx 보다 큰 숫자부터 가능하다(고른 숫자의 오른쪽부터 고를 수 있으므로).
그래서 idx+1 ~ i+k 를 통해서 각 문자의 범위를 지정할 수 있고
이중 for문을 통해 이를 처리하여 구현할 수 있다.
class Solution {
public String solution(String number, int k) {
StringBuilder answer = new StringBuilder();
int idx = -1; // 가장 최근 고른 idx
char mch = '0';
// 차례로 탐색
for(int i=0; i < number.length()-k ; i++){
mch = '0';
// 범위 내에서 가장 큰 숫자
for(int j=idx+1; j<= i+k; j++){
// 더 큰 숫자 있으면
if(mch < number.charAt(j)){
mch = number.charAt(j);
idx = j;
}
}
// 추가
answer.append(mch);
}
return answer.toString();
}
}
'Archived(CSE Programming) > 알고리즘(Java)' 카테고리의 다른 글
프로그래머스 거스름돈(Java, LV3) /DP (0) | 2020.10.17 |
---|---|
프로그래머스 - 멀쩡한 사각형(Java, LV2) (0) | 2020.10.16 |
프로그래머스 - 주식가격(Java, LV2) (0) | 2020.10.16 |
프로그래머스 타겟 넘버 (2) | 2020.03.15 |
프로그래머스 기능개발 (0) | 2020.01.12 |