개발 일지
2231. Largest Number After Digit Swaps by Parity (홀수짝수별 자릿수 스왑 후 가장 큰 수) 본문
코딩 테스트/LeetCode
2231. Largest Number After Digit Swaps by Parity (홀수짝수별 자릿수 스왑 후 가장 큰 수)
포카리tea 2024. 11. 4. 18:17양의 정수 num이 주어집니다. 패리티가 동일한 num의 두 자리(즉, 홀수 자리 또는 짝수 자리 모두)를 교환할 수 있습니다.
스왑 횟수 이후 가능한 최대 값인 num을 반환합니다.
예시 1:
입력: num = 1234
출력: 3412
설명: 숫자 3과 숫자 1을 바꾸면 숫자 3214가 됩니다.
숫자 2를 숫자 4와 바꾸면 숫자 3412가 됩니다.
다른 스왑 시퀀스가 있을 수 있지만 3412가 가장 많은 수임을 알 수 있습니다.
또한 숫자 4는 패리티가 다르기 때문에 숫자 1과 교환할 수 없습니다.
예시 2:
입력: num = 65875
출력: 87655
설명: 숫자 8과 숫자 6을 바꾸면 숫자 85675가 됩니다.
첫 번째 숫자 5와 숫자 7을 바꾸면 숫자 87655가 됩니다.
다른 스왑 시퀀스가 있을 수 있지만 87655가 가장 많은 수임을 알 수 있습니다.
조건:
- 1 <= num <= 109
정답:
public class Solution {
public int LargestInteger(int num) {
List<int> result = new List<int>();
string numString = num.ToString();
bool[] evenCheck = new bool[numString.Length];
for (int i = 0; i < numString.Length; i++)
{
evenCheck[i] = Int32.Parse(numString[i].ToString()) % 2 == 0;
}
List<int> even = new List<int>();
List<int> odd = new List<int>();
for (int i = 0; i < numString.Length; i++)
{
if (evenCheck[i])
{
even.Add(Int32.Parse(numString[i].ToString()));
}
else
{
odd.Add(Int32.Parse(numString[i].ToString()));
}
}
even.Sort();
even.Reverse();
odd.Sort();
odd.Reverse();
for (int i = 0; i < evenCheck.Length; i++)
{
if (evenCheck[i])
{
result.Add(even[0]);
even.RemoveAt(0);
}
else
{
result.Add(odd[0]);
odd.RemoveAt(0);
}
}
return Int32.Parse(string.Join("", result));
}
}
해설: num을 string으로 변환 후 자리 하나하나 홀수인지 짝수인지 확인하여 evenCheck에 넣어둡니다.
그 후 evenCheck에 따라 짝수는 even에 홀수는 odd에 추가한 후 정렬합니다.
정렬한 후 evenCheck의 홀짝 자리에 따라서 큰 순서대로 배치하고 return합니다.
'코딩 테스트 > LeetCode' 카테고리의 다른 글
1417. Reformat The String (문자열 재포맷) (1) | 2024.11.06 |
---|---|
2733. Neither Minimum nor Maximum (최소값도 최대값도 아니다) (0) | 2024.11.05 |
1557. Minimum Number of Vertices to Reach All Nodes ( 모든 노드에 도달하기 위한 최소 정점 수) (0) | 2024.11.04 |
229. Majority Element II (다수 원소 II) (2) | 2024.11.01 |
682. Baseball Game (야구 게임) (3) | 2024.10.31 |