Leetcode Java Maximum Difference by Remapping a Digit

업데이트:

문제

Link

코드

class Solution {

  public int minMaxDifference(int num) {
    String str = String.valueOf(num);
    char[] max = str.toCharArray();
    char[] min = str.toCharArray();
    char replace = ' ';
    for (char c : max) {
      if (c != '9') {
        replace = c;
        break;
      }
    }
    for (int i = 0; i < max.length; i++) {
      if (max[i] == replace) {
        max[i] = '9';
      }
    }
    replace = min[0];
    for (int i = 0; i < min.length; i++) {
      if (min[i] == replace) {
        min[i] = '0';
      }
    }
    return Integer.parseInt(String.valueOf(max)) - Integer.parseInt(String.valueOf(min));
  }

}

결과

Link

설명

  1. num의 숫자들 중 하나의 숫자를 선택하여 [0, 9]로 바꾸었을 때 최댓값과 최솟값을 구한 후, 두 값의 차잇값을 구하는 문제이다.

  2. 문제 풀이에 필요한 변수를 정의한다.
    • str은 num을 문자열로 변환한 변수이다.
    • max와 min은 최댓값과 최솟값으 문자를 변환하여 저장할 변수로, str의 문자 배열로 초기화한다.
    • replace는 변환할 문자열을 저장할 변수로, 임의 문자열인 ‘ ‘로 초기화하고 max의 문자를 순차적으로 c에 넣은 후 순차적으로 c가 9가 아니면 replace에 c를 넣어준다.
  3. 0부터 max의 길이 미만까지 i를 증가시키며, max[i]의 값이 replace와 같은 문자열을 모두 ‘9’로 바꿔 최댓값 문자 배열로 변환한다.

  4. replace를 min[0]의 첫 값으로 초기화 후 0부터 min의 길이 미만까지 i를 증가시키며 아래를 min[i]의 값이 replace와 동일한 경우, min[i]에 ‘0’을 넣어 최솟값 문자여롤 변환한다.

  5. max와 min을 정수형으로 변환 후 두 값의 차이를 주어진 문제의 결과로 반환한다.

해설

  • 임의 값 num의 첫 번째 값과 동일한 값을 9로 바꿔주는 경우, 한 숫자만 바꿀 때 가장 큰 값이된다.
    • 예를 들어, 121212 -> 929292
  • 임의 값 num의 첫 번째 값과 동일한 값을 0으로 바꿔주는 경우, 한 숫자만 바꿀 때 가장 작은 값이된다.
    • 예를 들어, 121212 -> 20202

소스

Sample Code는 여기에서 확인 가능합니다.

댓글남기기