문제 출처 : https://www.acmicpc.net/problem/28702
언어 : Kotlin
문제 설명 :
FizzBuzz 문제는 i = 1, 2, ... 에 대해 다음 규칙에 따라 문자열을 한 줄에 하나씩 출력하는 문제입니다.
- i가 3의 배수이면서 5의 배수이면 “FizzBuzz”를 출력합니다.
- i가 3의 배수이지만 5의 배수가 아니면 “Fizz”를 출력합니다.
- i가 3의 배수가 아니지만 5의 배수이면 “Buzz”를 출력합니다.
- i가 3의 배수도 아니고 5의 배수도 아닌 경우 i를 그대로 출력합니다.
FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열이 주어집니다. 이때, 이 세 문자열 다음에 올 문자열은 무엇일까요?
입력 :
FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열이 한 줄에 하나씩 주어집니다. 각 문자열의 길이는 8 이하입니다. 입력이 항상 FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열에 대응됨이 보장됩니다.
출력 :
연속으로 출력된 세 개의 문자열 다음에 올 문자열을 출력하세요. 여러 문자열이 올 수 있는 경우, 아무거나 하나 출력하세요.
제한 사항 :
- 시간 제한 : 0.5초
- 메모리 제한 : 1024MB
입출력 예 :
입력 | 출력 |
Fizz Buzz 11 |
Fizz |
980803 980804 FizzBuzz |
980806 |
풀이 :
3과 5의 최소공배수 15를 기준으로 나머지 연산을 하여 경우의 수를 생각해보자.
그럴 경우 범위는 0 ~ 14로 제한된다.
이를 문제에서 주어진 조건대로 FizzBuzz로 바꿔보자.
FizzBuzz 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14
이리저리 나눠봐도 전부다 FizzBuzz로 바뀔 일은 존재하지 않는다.
숫자만 나오는 경우도 없으며 가짓수는 순서 상관없이 2가지로 제한된다.
- 숫자 + 숫자 + 문자
- 문자 + 문자 + 숫자
입력은 총 3번 이뤄지니까 숫자가 나오는 경우의 Index에 맞게 수를 더해주고 4번째(결과)를 FizzBuzz 변경을 시도해보면 된다.
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
var result = 0
for (i in 0 until 3) {
val cur = readLine()
try {
val temp = cur.toInt()
result = when (i) {
0 -> temp + 3
1 -> temp + 2
2 -> temp + 1
else -> -1
}
break
} catch (_: NumberFormatException) {
continue
}
}
bw.write(
when {
result % 15 == 0 -> "FizzBuzz"
result % 5 == 0 -> "Buzz"
result % 3 == 0 -> "Fizz"
else -> "$result"
}
)
bw.flush()
bw.close()
}
'백준 > 문제' 카테고리의 다른 글
14444번: 가장 긴 팰린드롬 부분 문자열 (0) | 2024.06.03 |
---|---|
19585번: 전설 (0) | 2024.06.03 |
30454번: 얼룩말을 찾아라! (0) | 2024.05.31 |
16360번: Go Latin (0) | 2024.05.31 |
3447번: 버그왕 (0) | 2024.05.31 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!