비버놀로지

[Programmers 프로그래머스] 42883 큰 수 만들기 (java) 본문

ALGORITM/JAVA

[Programmers 프로그래머스] 42883 큰 수 만들기 (java)

KUNDUZ 2021. 3. 31. 20:30
728x90

 

programmers.co.kr/learn/courses/30/lessons/42883

 

코딩테스트 연습 - 큰 수 만들기

 

programmers.co.kr

문제 설명

어떤 숫자에서 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"

 

k의 크기만큼 최대값을 찾아 바꿔주는 방식으로 문제를 해결했다.

 

진행하면서 작은 값이 나온다면 cnt를 하나씩 올려주는식으로 하나씩 뺄 수 있게 했다.

 

class Solution {
    public String solution(String number, int k) {
StringBuilder answer = new StringBuilder();
		int cnt = 0;
		char max = '0';
		if (number.charAt(0) == '0') {	//만약에 입력이 0이라면 결과 0을 반환
			answer.append("0");
		}
		for (int i = 0; i < number.length() - k; i++) {	//k개를 빼야하기 때문에 -k를 해준다.
			max = '0';
			for (int j = cnt; j <= k + i; j++) {	
				if (number.charAt(j) > max) {	//max보다 크기가 크다면 전에 값을 삭제하고
					max = number.charAt(j);	
					cnt = j + 1;		//하나 올려준다.

				}
			}
			answer.append(max);		//결과에 하나씩 문자를 더해준다.
		}
        return answer.toString();
    }
}
728x90
Comments