
문제
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()
}
'알고리즘 > 백준' 카테고리의 다른 글
| [백준/Python] 11279번. 최대 힙 (1) | 2024.11.15 | 
|---|---|
| [백준/Python] 1927번. 최소 힙 (2) | 2024.11.15 | 
| [백준/Python] 2167번. 2차원 배열의 합 (2) | 2024.11.15 | 
| [백준/Python] 11047번. 동전 0 (3) | 2024.11.15 | 
| [백준/Python] 9017번. 크로스 컨트리 (1) | 2024.11.15 |