728x90
반응형
문제 요약
- 알고리즘 분류: 구현, 브루드 포스, 그리디
- 난이도: Medium
- 문제내용:
- 숫자 num이 주어지고 두개 숫자 변경 해서 최대 값을 구하여라
- 사이트 주소: https://leetcode.com/problems/maximum-swap/
문제풀이
이번 문제는 숫자 2개만 바꿔서 그 중 최대 값만 반환 하기 때문에 어렵지 않다고 생각하낟. 그래서 아래 처럼 구현만 된다.
- 숫자를 배열 또는 리스트로 만든다. 그리고 num값을 최대값으로 지정 한다.
- 이중 for문 돌려서 i는 0 ~ 배열 크기 -1, j는 i + 1 ~ 배열 크기 만큼 돌린다.
- i, j 바꾸고난뒤 숫자로 변환 한뒤 이전 최대 값과 비교하여 그중 큰 값으로 저장 한다.
위 처럼 구현하면 시간 복잡도는 num의 자리수를 N이라고 볼면 O(N^2)만큼 나온다. 근데 숫자가 10^8승이 최대라서 의미는 없다고 보면 된다. 위 방법 말고 그리디 방법 있는데 그 방법 추후에 다시 작성 하겠다.
Code
Python
class Solution:
def maximumSwap(self, num: int) -> int:
array_number = list(map(int, list(str(num)))) # 숫자 배열로 변환
max_num = num # 초기 최대값을 현재 숫자로 설정
size = len(array_number)
for i in range(size - 1):
for j in range(i + 1, size):
# i, j 바꾸기
array_number[i], array_number[j] = array_number[j], array_number[i]
# 숫자를 다시 정수로 변환하여 최대값과 비교 후 갱신
max_num = max(max_num, int(''.join(map(str, array_number))))
# 원위치
array_number[i], array_number[j] = array_number[j], array_number[i]
return max_num
Java
class Solution {
public int maximumSwap(int num) {
int maxNum = num;
String numStr = String.valueOf(num);
int size = numStr.length();
int[] nums = new int[size];
for (int i = 0; i < size; i++) {
nums[i] = numStr.charAt(i) - '0';
}
for (int i = 0; i < size - 1; i++) {
for (int j = i + 1; j < size; j++) {
// swap
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
// 숫자를 다시 정수로 변환하여 최대값과 비교 후 갱신
maxNum = Math.max(maxNum, arrayToInteger(nums));
// 다시 원위치
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
return maxNum;
}
// 배열을 숫자로 변환
public int arrayToInteger(int[] array){
StringBuilder sb = new StringBuilder();
for (int num : array) {
sb.append(num);
}
return Integer.parseInt(sb.toString());
}
}
JavaScript
var maximumSwap = function(num) {
let maxNum = num;
let numArray = num.toString().split('');
const size = numArray.length;
for (let i = 0; i < size - 1; i++) {
for (let j = i + 1; j < size; j++) {
// swap
let tmp = numArray[i];
numArray[i] = numArray[j];
numArray[j] = tmp;
// 숫자를 다시 정수로 변환하여 최대값과 비교 후 갱신
maxNum= Math.max(maxNum, parseInt(numArray.join('')))
// 다시 원 위치
tmp = numArray[i];
numArray[i] = numArray[j];
numArray[j] = tmp;
}
}
return maxNum;
};
728x90
반응형
'알고리즘 > Leetcode' 카테고리의 다른 글
[Leetcode]452. Minimum Number of Arrows to Burst Balloons (1) | 2025.03.15 |
---|---|
[Leetcode]1442. Count Triplets That Can Form Two Arrays of Equal XOR (1) | 2025.03.08 |
[Leetcode]1781. Sum of Beauty of All Substrings (0) | 2025.01.13 |
[Leetcode]2120. Execution of All Suffix Instructions Staying in a Grid (0) | 2025.01.12 |
[Leetcode]3309. Maximum Possible Number by Binary Concatenation (2) | 2025.01.11 |