문제 설명
어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.
예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다.
문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.
제한 조건
- number는 1자리 이상, 1,000,000자리 이하인 숫자입니다.
- k는 1 이상 number의 자릿수 미만인 자연수입니다.
입출력 예
number | k | return |
1924 | 2 | 94 |
1231234 | 3 | 3234 |
4177252841 | 4 | 775841 |
풀이 코드 [자바/java]
class Solution {
public String solution(String number, int k) {
StringBuilder sb = new StringBuilder();
int index = 0;
int max = 0;
for(int i=0; i<number.length() - k; i++) {
max = 0;
for(int j = index; j<= k+i; j++) {
if(max < number.charAt(j)-'0') {
max = number.charAt(j)-'0';
index = j+1;
}
}
sb.append(max);
}
return sb.toString();
}
}
내 문제풀이 방법 설명
먼저 return 해야 할 문자의 길이는 매개변수로 들어온 number의 길이에서 k만큼을 빼준 길이가 된다.
그래서 for문을 먼저 만들어야 할 문자의 길이만큼 반복을 했다.
그 이후에 가장 큰 수를 탐색하여 StringBuilder에 붙혀주고 return 해주면 되는데..
조건에서 k만큼의 수를 제거했을때 가장 큰 수 이기 때문에
두번째 for문의 범위는 탐색해야하는 문자의 시작(index)부터, 앞으로 이어붙혀야할 문자의 길이 -1이 뒤에 남는 index까지 탐색을 해야한다.
그리고 index에는 가장 큰수 다음 index를 넣어준다.
이유는 그 다음 문자열부터 가장 큰 수를 찾아야하기 때문이다.
[입출력 예]의 3번 예제로 예를 들면
'4177252841' 를 0번 index부터 탐색을 시작하여 총 6자리의 return 값을 만들어야 하기 때문에 뒤에서 6번째에 위치한 '41772' 까지 탐색을 진행한다.
그리고 StringBuilder에 가장 큰 수를 append한다.
그러면 이제 앞으로 5자리를 이어 붙히면 되고, 이제 탐색할 시작 index는 가장 큰 수였던 3번인덱스 다음인 4번인덱스 부터 순회한다.
'7252841' 문자열을 탐색하는것이다.
그러면 앞의 규칙에 따라 뒤에서 5번째에 위치한 '725' 까지 탐색을 진행하고 가장큰수를 append한다.
그 다음은 '252841' 문자열을 뒤에서 4번째인 '252' 까지,
그 다음은 '2841' 문자열을 뒤에서 3번째인 '28' 까지,
그 다음은 '41' 문자열을 뒤에서 2번째인 '4' 까지,
그 다음은 '1' 문자열을 뒤에서 1번째인 '1' 까지,
모든 범위가 끝나게되면 현재까지 진행했던 가장큰수를 이어붙인 '775841'가 만들어질것이고
return 해주면 된다.
'알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 무지의 먹방 라이브(Level 4/2019 카카오 블라인드 채용 문제) [자바/JAVA] 풀이- 개발하는 지토 (2) | 2020.09.07 |
---|---|
[알고리즘] 프로그래머스 모의고사(Level 1) [자바/JAVA] 풀이- 개발하는 지토 (1) | 2020.09.03 |
[알고리즘] 프로그래머스 자물쇠와 열쇠(Level 2/2020 카카오 블라인드 채용 문제) [자바/JAVA] 풀이- 개발하는 지토 (0) | 2020.08.31 |
[알고리즘] 2차원 배열 90도 회전 메서드 구현 (자바/java) (0) | 2020.08.31 |
[알고리즘] 프로그래머스 문자열 압축(Level 2/2020 카카오 블라인드 채용 문제) [자바/JAVA] 풀이- 개발하는 지토 (0) | 2020.08.31 |
댓글