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.
주어진 문제는 각 문자열의 값을 구하고, 그중에서 최댓값을 찾는 문제입니다. 문자열의 값은 다음과 같이 정의됩니다:
- 문자열이 오로지 숫자로만 이루어져 있다면, 해당 숫자의 10진수 값이 문자열의 값이 됩니다.
- 문자열에 문자가 포함되어 있다면, 문자열의 길이가 문자열의 값이 됩니다.
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;
}
}
이번 문제에서는, 코드가 너무 길어지고 혼란을 피하기 위해서 따로 메소드를 하나 만들어봤습니다 :
- 최댓값 변수 초기화 :
- int maxValue = Integer.MIN_VALUE; 문장을 사용하여 초기 최댓값을 가장 작은 정수 값으로 설정합니다. 이는 입력 배열의 모든 값이 음수일 수도 있기 때문에 안전한 초기값입니다.
- 문자열 배열 순회 :
- for (String str : strs) 문장을 사용하여 strs 배열의 모든 문자열을 순회합니다.
- 각 문자열 str에 대해 값을 계산하고, 이를 최댓값과 비교하여 최대값을 갱신합니다.
- 숫자 확인 및 변환 :
- if (isNumeric(str)) 조건문을 사용하여 문자열이 숫자로만 구성되어 있는지 확인합니다.
- 숫자로만 이루어져 있으면 Integer.parseInt(str)를 사용하여 문자열을 정수로 변환하고 값을 설정합니다.
- 그렇지 않으면 문자열의 길이를 값으로 사용합니다.
- 최대값 갱신 :
- 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)
- 추가적인 데이터 구조를 사용하지 않으므로, 상수 공간만 사용합니다. 단지 몇 개의 변수를 사용하여 값을 추적합니다.
'LeetCode' 카테고리의 다른 글
[LeetCode] - 232. Implement Queue Using Stacks (0) | 2024.08.01 |
---|---|
[LeetCode] - 169. Majority Element (0) | 2024.08.01 |
[LeetCode] - 2441. Largest Positive Integer That Exists With Its Negative (0) | 2024.08.01 |
[LeetCode] - 2413. Smallest Even Multiple (0) | 2024.08.01 |
[LeetCode] - 2264. Largest 3 Same Digit Number in String (2) | 2024.08.01 |