본문 바로가기

LeetCode

[LeetCode] - 2496. Maximum Value of a String in an Array

LeetCode는 프로그래밍 문제를 풀며 코딩 실력을 향상할 수 있는 온라인 플랫폼입니다. 다양한 알고리즘 및 데이터 구조 문제를 제공하며, 면접 대비에 유용합니다. 해당 문제는, LeetCode Problems에서 볼 수 있는 난이도 '쉬움 (Easy)' 단계인 "Maximum Value of a String in an Array" 문제입니다.

--> https://leetcode.com/problems/maximum-value-of-a-string-in-an-array/description/

 

문제 : 

The value of an alphanumeric string can be defined as :

  • The numeric representation of the string in base 10, if it comprises of digits only.
  • The length of the string, otherwise.

Given an array strs of alphanumeric strings, return the maximum value of any string in strs.


Example 1 :

Input : strs = ["alic3","bob","3","4","00000"]

Output : 5

Explanation : - "alic3" consists of both letters and digits, so its value is its length, i.e. 5. - "bob" consists only of letters,

so its value is also its length, i.e. 3. - "3" consists only of digits, so its value is its numeric equivalent,

i.e. 3. - "4" also consists only of digits, so its value is 4. - "00000" consists only of digits, so its value is 0.

Hence, the maximum value is 5, of "alic3".

 

Example 2 :

Input : strs = ["1","01","001","0001"]

Output : 1

Explanation : Each string in the array has value 1. Hence, we return 1.

 

Constraints :

  • 1 <= strs.length <= 100
  • 1 <= strs[i].length <= 9 strs[i]
  • consists of only lowercase English letters and digits.

주어진 문제는 각 문자열의 값을 구하고, 그중에서 최댓값을 찾는 문제입니다. 문자열의 값은 다음과 같이 정의됩니다:

  1. 문자열이 오로지 숫자로만 이루어져 있다면, 해당 숫자의 10진수 값이 문자열의 값이 됩니다.
  2. 문자열에 문자가 포함되어 있다면, 문자열의 길이가 문자열의 값이 됩니다.
class Solution {
    public int maximumValue(String[] strs) {
        int maxValue = Integer.MIN_VALUE;

        for (String str : strs) {
            int value;
            if (isNumeric(str)) {
                value = Integer.parseInt(str);
            } else {
                value = str.length();
            }
            if (value > maxValue) {
                maxValue = value;
            }
        }

        return maxValue;
    }

    public static boolean isNumeric(String str) {
        for (int i = 0; i < str.length(); i++) {
            if (!Character.isDigit(str.charAt(i))) {
                return false;
            }
        }
        return true;
    }
}

 

이번 문제에서는, 코드가 너무 길어지고 혼란을 피하기 위해서 따로 메소드를 하나 만들어봤습니다 :

  1. 최댓값 변수 초기화 :
    • int maxValue = Integer.MIN_VALUE; 문장을 사용하여 초기 최댓값을 가장 작은 정수 값으로 설정합니다. 이는 입력 배열의 모든 값이 음수일 수도 있기 때문에 안전한 초기값입니다.
  2. 문자열 배열 순회 :
    • for (String str : strs) 문장을 사용하여 strs 배열의 모든 문자열을 순회합니다.
    • 각 문자열 str에 대해 값을 계산하고, 이를 최댓값과 비교하여 최대값을 갱신합니다.
  3. 숫자 확인 및 변환 :
    • if (isNumeric(str)) 조건문을 사용하여 문자열이 숫자로만 구성되어 있는지 확인합니다.
    • 숫자로만 이루어져 있으면 Integer.parseInt(str)를 사용하여 문자열을 정수로 변환하고 값을 설정합니다.
    • 그렇지 않으면 문자열의 길이를 값으로 사용합니다.
  4. 최대값 갱신 :
    • if (value > maxValue) { maxValue = value; } 문장을 통해 현재 값이 최댓값보다 큰지 확인하고, 최댓값을 갱신합니다.

isNumeric 메소드

  • 메소드 설명 :
    • public static boolean isNumeric(String str) 메서드는 주어진 문자열이 숫자로만 이루어져 있는지 확인합니다.
    • for (int i = 0; i < str.length(); i++) { ... }를 사용하여 문자열의 각 문자를 검사합니다.
    • if (!Character.isDigit(str.charAt(i))) { return false; } 문장을 사용하여 숫자가 아닌 문자가 포함되어 있으면 false를 반환합니다.
    • 문자열의 모든 문자가 숫자인 경우 true를 반환합니다.
  • 시간 복잡도 : O(n * m)
    • 여기서 n은 배열 strs의 길이이고, m은 각 문자열의 평균 길이입니다.
    • 문자열 배열을 순회하며 각 문자열의 길이를 확인하고 숫자인지 검사하므로 O(n * m)입니다.
  • 공간 복잡도 : O(1)
    • 추가적인 데이터 구조를 사용하지 않으므로, 상수 공간만 사용합니다. 단지 몇 개의 변수를 사용하여 값을 추적합니다.

내 코드 Runtime 결과