2442. Count Number of Distinct Integers After Reverse Operations
문제 설명
- nums로 숫자배열 주어짐
- 거이에 각 배열안의 숫자들을 뒤집은 숫자도 포함해서
- 안겹치는 숫자의 개수를 출력하라
문제 풀이
- 그냥 단순히 SET으로 다 더해주면 될 것인데,
- 여기서 키포인트는 아마 숫자를 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
}
}
타인의코드
보시다시피 제일 하위그룹에 포함되어 있어서 어떤 코드가 빠른지 찾아봤다.
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으로 나눈 나머지(%)를 구하고 몫을 계속해서 업데이트하는 방식으로 수동으로 숫자를 "뒤집어놓으셨다."