[백준/Kotlin] 28702번. FizzBuzz

 

문제

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

 

 

풀이

3개의 입력값 다음의 올 숫자( targetNumber )에 대한 FizzBuzz값을 찾는 문제이다.

특정 숫자의 FizzBuzz값은 아래와 같이 3과 5의 나머지 연산을 통해 쉽게 구할 수 있다.

fun getFizzBuzz(i: Int): String {
    if (i % 3 == 0 && i % 5 == 0) {
        return "FizzBuzz"
    }
    if (i % 3 == 0) {
        return "Fizz"
    }
    if (i % 5 == 0) {
        return "Buzz"
    }
    return i.toString()
}

 


3개의 연속된 입력값중에 정수 i가 하나라도 존재하면
i + (4 - (입력값i의인덱스 + 1)) 로 targetNumber를 쉽게 구할 수 있지만.

입력값중에 정수가 없다면 아래와 같은 코드로 찾을 수 있었을 것이다.

fun getTargetNumber(input: MutableList<String>): Int {
    var index = 0
    while (true) {
        index += 1
        if (input[0] == getFizzBuzz(index)) {
            if (input[1] == getFizzBuzz(index + 1) && input[2] == getFizzBuzz(index + 2)) {
                return index + 3
            }
        }
    }
}

 

하지만 연속된 수가 3과 5의 배수인 경우는 없어서 입력값 중 하나는 무조건 정수이다...

따라서 getFizzBuzz( targetNumber ) 값을 바로 출력하면 된다.

 

 

 

정답 코드

fun main() {
    val input = mutableListOf<String>()
    var targetNumber: Int? = null
    for (i in 1..3) {
        input.add(readln())
    }
    input.forEachIndexed { index, s ->
        if (s.toIntOrNull() != null) {
            targetNumber = s.toInt() + (4 - (index + 1))
        }
    }
    println(getFizzBuzz(targetNumber!!))
}

fun getFizzBuzz(i: Int): String {
    if (i % 3 == 0 && i % 5 == 0) {
        return "FizzBuzz"
    }
    if (i % 3 == 0) {
        return "Fizz"
    }
    if (i % 5 == 0) {
        return "Buzz"
    }
    return i.toString()
}