문제
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번. 최대 힙 (0) | 2024.11.15 |
---|---|
[백준/Python] 1927번. 최소 힙 (0) | 2024.11.15 |
[백준/Python] 2167번. 2차원 배열의 합 (0) | 2024.11.15 |
[백준/Python] 11047번. 동전 0 (0) | 2024.11.15 |
[백준/Python] 9017번. 크로스 컨트리 (0) | 2024.11.15 |