백준

[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);
            }
        }
    }
}

 

 

채점 결과

28702번 채점 결과

기타

  •   생각보다 막막했던 문제... 이게 브론즈 문제라니.. 감이 다 죽었다.

 

문제 링크