경험의 기록

 

문제 : https://www.acmicpc.net/problem/1436

 

1436번: 영화감독 숌

666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타

www.acmicpc.net

 

 

풀이

// [백준] 1436. 영화감독 숌 (Kotlin)

fun main() = with(System.`in`.bufferedReader()){
    var n = readLine().toInt()
    var number = 665

    // 666보다 큰 모든 수에 대하여 666 포함여부 n번째 수까지 탐색
    while(n!=0){
        number++
        if(number.toString().contains("666")){
            n--
        }
    }

    println(number)
}

일단 666을 포함하는 가장 작은 수는 666이므로

666부터 하나씩 수를 늘려가며 666라는 문자가 포함되어있는지 여부를 전체 탐색해준다.

하지만 모든 수에 대하여 String으로 변환후 contains 으로 포함여부를 확인하는 작업은

매우 시간이 오래걸리게 된다.

 

다른풀이

// [백준] 1436. 영화감독 숌 (Kotlin)

fun main() = with(System.`in`.bufferedReader()){
    var n = readLine().toInt()
    var number = 665

    // 666보다 큰 모든 수에 대하여 666 포함여부 n번째 수까지 탐색
    while(n!=0){
        number++
        var count = 0
        var tmp = number

        while(tmp > 0){
            // 일의자리부터 이 숫자가 6을 포함하는가?
            if(tmp % 10 == 6){
                count++
            }
            // 6이 연속되지 않는다면 0
            else count = 0

            // 다음 자리 수 비교
            tmp/=10

            // 6이 3번 연속된다면
            if(count == 3) {
                n--
            }
        }
    }

    println(number)
}

따라서 숫자를 나머지값 계산을 통하여 666이 연속되는지 연산으로 구현하면

좀 더 효율적으로 구할 수 있다.

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading