[Swift] [53일차] 2442_LEET 숫자뒤집기

·2025년 1월 29일
0

SwiftAlgorithm

목록 보기
56/105
post-thumbnail

2442. Count Number of Distinct Integers After Reverse Operations

문제 설명

  1. nums로 숫자배열 주어짐
  2. 거이에 각 배열안의 숫자들을 뒤집은 숫자도 포함해서
  3. 안겹치는 숫자의 개수를 출력하라

문제 풀이

  1. 그냥 단순히 SET으로 다 더해주면 될 것인데,
  2. 여기서 키포인트는 아마 숫자를 string으로해서 그걸 뒤집고 다시 int로 배열에 추가해주는 과정이 잘 이루어지는가 인 것 같다.

일단 그 뒤집은 숫자를 출력하는 함수를 만들자

func changeToReverse(num: Int) -> Int {
    var str = ""
    str += String(Array(String(num)).reversed())
    return Int(str)!
}

str문자열 선언해주고 Int -> String -> [String] -> reversed -> String -> Int 의 과정을 거치게해줬다.

풀이 함수에서는

class Solution {
    func countDistinctIntegers(_ nums: [Int]) -> Int {
        var set = Set(nums)
        nums.reversed().map {
            set.insert(changeToReverse(num: $0))
        }

        return set.count
    }
}

있던 nums는 그대로 SET으로 포함시켜주고 여기에 map돌면서 setㅇ 더해준뒤 count를 출력하면 끝이다.


타인의코드

보시다시피 제일 하위그룹에 포함되어 있어서 어떤 코드가 빠른지 찾아봤다.

class Solution {
    func countDistinctIntegers(_ nums: [Int]) -> Int {
        var nums = Set(nums)

        for num in nums {
            var result = 0
            var temp = num
            
            while temp != 0 {
                var digit = temp % 10
                result = result * 10 + digit
                temp /= 10
            }
            nums.insert(result)
        }

        return nums.count
    }
}

문자열로 변환하여 처리하는 방식(내방식)이 훨씬 간단하긴한데, 연산이 쓸데없이 많아서 아마 더 엄격한 조건에서는 TimeLimit으로 실패코드였을 것 같다.
이분은 그렇게 일일히 타입변환 연산하지않고, 수치 연산에서만 놀아서 시간을 엄청 줄인 것을 볼 수 있다. 10으로 나눈 나머지(%)를 구하고 몫을 계속해서 업데이트하는 방식으로 수동으로 숫자를 "뒤집어놓으셨다."

profile
기억보단 기록을

0개의 댓글