반응형
1) 문제
https://leetcode.com/problems/largest-number-after-digit-swaps-by-parity/description/
You are given a positive integer num. You may swap any two digits of num that have the same parity (i.e. both odd digits or both even digits).
Return the largest possible value of num after any number of swaps.
Example 1:
Input: num = 1234
Output: 3412
Explanation: Swap the digit 3 with the digit 1, this results in the number 3214.
Swap the digit 2 with the digit 4, this results in the number 3412.
Note that there may be other sequences of swaps but it can be shown that 3412 is the largest possible number.
Also note that we may not swap the digit 4 with the digit 1 since they are of different parities.
Example 2:
Input: num = 65875
Output: 87655
Explanation: Swap the digit 8 with the digit 6, this results in the number 85675.
Swap the first digit 5 with the digit 7, this results in the number 87655.
Note that there may be other sequences of swaps but it can be shown that 87655 is the largest possible number.
Constraints:
- 1 <= num <= 109
2) 내가 구현한 코드
class Solution {
public int largestInteger(int num) {
//입력 숫자를 문자열로 변환
final String s = String.valueOf(num);
int ans = 0;
//힙 배열 초기화
// maxHeap[0] : 짝수들을 저장하는 최대 힙
// maxHeap[1] : 홀수들을 저장하는 최대 힙
Queue<Integer>[] maxHeap = new Queue[2];
maxHeap[0] = new PriorityQueue<>(Collections.reverseOrder());
maxHeap[1] = new PriorityQueue<>(Collections.reverseOrder());
//각 자릿수를 홀수와 짝수로 분류
for (final char c : s.toCharArray()) {
final int digit = c - '0'; //문자열 s의 각 문자 c를 순회하며 숫자(digit)로 변환
maxHeap[digit % 2].offer(digit); //숫자가 홀수(digit % 2 == 1)인지 짝수(digit % 2 == 0)인지에 따라 해당 힙(maxHeap[0] 또는 maxHeap[1])에 추가
//ex.num = 3254 => 3 → 홀수 → maxHeap[1]에 추가/ 2 → 짝수 → maxHeap[0]에 추가/ 5 → 홀수 → maxHeap[1]에 추가/ 4 → 짝수 → maxHeap[0]에 추가
}
//가장 큰 값을 순서에 맞게 조합
for (final char c : s.toCharArray()) {
final int i = c - '0' & 1; //다시 문자열 s를 순회하며 자릿수를 확인
ans = (ans * 10 + maxHeap[i].poll()); //현재 자리의 숫자가 홀수인지 짝수인지에 따라 maxHeap[1] 또는 maxHeap[0]에서 가장 큰 값을 꺼냄(poll()
}
return ans;
}
}
!!비트연산자 활용하기!!
3) 추가 문제
미들러 - 파도반 수열
https://www.acmicpc.net/problem/9461
챌린저 - 타임머신
반응형
'coding_test' 카테고리의 다른 글
[99클럽 4기 코테 스터디 TIL 31일차] 숫자놀이 (feat. HashMap, ArrayList) (0) | 2024.11.27 |
---|---|
[99클럽 4기 코테 스터디 TIL 30일차] 세준세비 (feat. 최소힙) (1) | 2024.11.26 |
[99클럽 4기 코테 스터디 TIL 28일차] 506. Relative Ranks (feat.TreeMap 이용함) (0) | 2024.11.25 |
[99클럽 4기 코테 스터디 TIL 27일차] Yangjojang of The Year (feat.TreeMap 이용함) (0) | 2024.11.23 |
[99클럽 4기 코테 스터디 TIL 26일차] K번째 수(feat. 오름차순 정렬) (0) | 2024.11.22 |