[백준] Viva la Diferencia (4084)(kotlin)

문제 설명

백준 4084번 문제 링크

입력 및 출력

» 입력

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, a, b, c, d가 순서대로 주어진다. 입력의 마지막 줄에는 0이 4개 주어진다. (1 ≤ a,b,c,d ≤ 2,000,000,000)

» 출력

각 테스트 케이스에 대해서, 수열이 몇 번 만에 수렴하는지 출력한다.

예제 입출력(테스트케이스)

입력 출력
1 3 5 9
4 3 2 1
1 1 1 1
0 0 0 0
6
4
0

문제 힌트

만약 네 정수가 2n보다 작다면, 3*n번 이내에 수렴한다.

문제 풀이1

import java.util.Scanner
import kotlin.math.abs

fun main(args: Array<String>) = with(Scanner(System.`in`)) {

    while(readLine()!!
            .split(" ")
            .map { it.toLong() }
            .toMutableList()
            .also { int ->
                var count = 0L
                while (int.count { it == int[0] } != 4) {
                    count++
                    val a = abs(int[0] - int[1])
                    val b = abs(int[1] - int[2])
                    val c = abs(int[2] - int[3])
                    val d = abs(int[3] - int[0])
                    int[0] = a
                    int[1] = b
                    int[2] = c
                    int[3] = d
                }
                if (int.count { it == 0L } != 4) println(count)
            }
            .count { it == 0L } != 4
    ) {}

}