본문 바로가기
Android & Kotlin/Kotlin Algorithm

[백준 코틀린] 1065 : 한수

by 말린밴댕이_공부 2022. 11. 11.
반응형

https://www.acmicpc.net/problem/1065

 

1065번: 한수

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나

www.acmicpc.net

 

 

x가 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다.
입력값 -> n / 1 <= .. <= n 한수의 갯수 출력

한 자리수  : 1 ~ 9 -> 길이가 1인 등차수열 / 모든 수 가 한수
두 자리수  : 10, 11, 12, 13, 14, 15, ... 99 -> 길이가 2인 등차수열
           따라서 90개 모두 다된다.
세 자리수 : 위의 형식처럼 진행이 된다.

ex)
1: 숫자 하나이므로 등차수열
2: 같은경우
3: 같은경우
..
10: 길이 2 /  1 0 인 수열 -> 등차수열o
11: 길이 2 /  1 1 인 수열 -> 등차수열o
..
100: 길이 3 / 1 0 0 인 수열 -> 등차수열x
101: 길이 3 / 1 0 1 인 수열 -> 등차수열x
..
123: 길이 3 / 1 2 3 인 수열 -> 등차수열o

 

이런식으로 진행이 되는것이다.

 

fun main(){
    var n : Int = readLine()!!.toInt()
    var arr = IntArray(1001)
    var ans : Int = 0

    for (i in 1 .. 9){
        for (j in 0..9){
            for(k in 0..9){
                if ( i- j == j - k){
                    arr[get_hundred(i,j,k)] = 1
                }else{
                    arr[get_hundred(i,j,k)] = 0
                }
            }
        }
    }
    if(n <= 99) {
        println("$n")
    } else{
        for(i in 100 .. n){
            if(arr[i] == 1) ans++
        }
        println("${ans + 99}")
    }
}

fun get_hundred(a:Int, b:Int, c:Int) :Int{
    return (100 * a + b *10 + c)
}

조금은 특이한 방식으로 진행해 보았다. 

약간이 아니라 아주 하드코딩적인 방식. 99이하일때는 입력한 값 출력

그리고 100이상일때는 등차수열을 이루면 1로 저장해놓고 나중에 합쳐서 출력하는 형태로 진행을 하였다.

 

그리고 코틀린은 아주그냥 이중, 삼중 배열을 쓰기가 너무 싫어서 그냥 한 배열을 진행을 진행해봤다.

 

반응형

댓글