Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발 일지

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합니다.