-
Algorithm) 숫자 하나씩 확인하기Algorithm 2019. 7. 3. 14:49728x90
17037300 와 같이 큰 수를 한 글자씩 확인해야 할 경우가 있습니다.
예를들어 다음과 같은 문제를 풀 경우가 되겠네요.
어려운 문제는 아니지만 꽤나 자주 등장하기 때문에 한번 짚고 넘어가고 싶어 포스팅을 하게 되었습니다 :D
1. 문자열로 바꿔서 하나씩 탐색
제 경우에 가장먼저 떠오른 생각은 문자열로 바꿔서 하나씩 탐색 하기였습니다.
이러한 방식으로 위 문제를 풀면
let numString = String(a*b*c) var numbers = [Int](repeating: 0, count: 10) for s in numString { if let n = Int(String(s)) { numbers[n] += 1 } }
다음과 같이 풀 수 있겠네요. 이러한 방식은 Swift와 같이 형변환이 까다로운 언어에서는 (특히나 Swift는 Character를 바로 Int 타입으로 변환할 수 없어 String을 한번 더 거쳐야 함.) 여러번 형 변환을 시켜줘야해서 그리 깔끔한 코드는 아닌듯 보입니다.
2. 10으로 나눠 끝자리부터 확인하기.
이 방법이 아마 일반적으로, 대표적으로 생각하시는 방법일듯 합니다.
맨 마지막 수는 % 10 을 해서 확인하고
해당 값은 / 10 을 해서 마지막 자리를 날려가며 확인하는 방법이죠.
위 문제를 예로보면 코드로는 다음과 같이 할 수 있겠습니다.
var number = a*b*c while number > 0 { let n = number % 10 numbers[n] += 1 number /= 10 }
0보다 큰 경우를 조건으로 주고 while을 돌면 마지막 남은 한 자리수까지 모두 확인할 수가 있겠죠?
저 같은경우 이렇게 케이스를 한번 짚고 넘어가지 않으면 이러한 방식을 사용해야할 때
저도 모르게 자꾸 1번의 방식을 고집하게 되더라구요.
이번엔 쉬운 케이스였지만 특히 여러 방식으로 코딩이 가능한 경우들은 이렇게 정리를 하는 습관들 들여야겠어요 XD
저도 여러분도 항상 화이팅입니다!