Algorithm

Algorithm) 숫자 하나씩 확인하기

삼쓰 웅쓰 2019. 7. 3. 14:49
728x90

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 

저도 여러분도 항상 화이팅입니다!