ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 

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

    댓글

Designed by Tistory.