백준
[JAVA] 백준 28702번: FizzBuzz
스파게티 코더
2024. 7. 13. 14:23
문제
- 연속된 3개의 수가 3의 배수와 5의 배수 여부에 따라 "FizzBuzz", "Fizz", "Buzz", 혹은 숫자 그대로 출력될 때, 다음에 올 요소를 출력하는 문제.
아이디어
- "FizzBuzz" 의 규칙성을 찾는다.
- 직접 수를 나열해보면
- [1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz] [16 17 ...
- 의 식으로 구간이 반복된다.
- 연속된 3개의 수가 주어지는 상황에서 언제나 숫자 하나를 포함하게 된다.
- 숫자 하나를 감지하는 순간 그 이후 입력부터 1씩 더해가며 숫자를 카운트 해간다.
- 숫자인지 문자인지를 감지하기 위해서 입력받은 문자열의 앞 문자가 'F' 혹은 'B' 인지를 파악한다.
- 카운트를 끝낸 후 정답이 될 수를 구하고, 이를 조건 분기에 태워 해답을 도출한다.
풀이
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 숫자를 담을 변수
int num = 0;
// 숫자를 찾았는지 여부를 체크하는 변수
boolean flag = false;
for(int i=0; i<3; i++) {
String str = br.readLine();
// 입력받은 문자열의 앞 문자만 따로 빼서 비교
char c = str.charAt(0);
// 만약 입력받은 문자열이 숫자면 플래그 변경
if(c != 'F' && c != 'B') {
num = Integer.parseInt(str);
flag = true;
}
// 숫자를 찾은 상태면 다음에 뭐가 오든 + 1 하여 다음 수 추측
if(flag) {
num++;
}
}
// 조건 분기로 답 출력
if(num%3==0) {
if(num%5==0) {
// FizzBuzz
System.out.println("FizzBuzz");
}
else {
// Fizz
System.out.println("Fizz");
}
}
else{
if(num%5==0) {
// Buzz
System.out.println("Buzz");
}
else {
// i
System.out.println(num);
}
}
}
}
채점 결과
기타
- 생각보다 막막했던 문제... 이게 브론즈 문제라니.. 감이 다 죽었다.