728x90
[Bronze I] FizzBuzz - 28702
성능 요약
메모리: 14372 KB, 시간: 108 ms
분류
수학, 문자열
제출 일자
2025년 2월 22일 17:52:20
문제 설명
FizzBuzz 문제는 i=1,2,⋯$i = 1, 2, \cdots$ 에 대해 다음 규칙에 따라 문자열을 한 줄에 하나씩 출력하는 문제입니다.
- i$i$가 3$3$의 배수이면서 5$5$의 배수이면 “
FizzBuzz
”를 출력합니다. - i$i$가 3$3$의 배수이지만 5$5$의 배수가 아니면 “
Fizz
”를 출력합니다. - i$i$가 3$3$의 배수가 아니지만 5$5$의 배수이면 “
Buzz
”를 출력합니다. - i$i$가 3$3$의 배수도 아니고 5$5$의 배수도 아닌 경우 i$i$를 그대로 출력합니다.
FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열이 주어집니다. 이때, 이 세 문자열 다음에 올 문자열은 무엇일까요?
입력
FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열이 한 줄에 하나씩 주어집니다. 각 문자열의 길이는 8$8$ 이하입니다. 입력이 항상 FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열에 대응됨이 보장됩니다.
출력
연속으로 출력된 세 개의 문자열 다음에 올 문자열을 출력하세요. 여러 문자열이 올 수 있는 경우, 아무거나 하나 출력하세요.
문제 풀이
주어진 i값 다음에 올 숫자를 구하는 문제다.
다만 i 다음에 올 숫자가 3의 배수나 5의 배수인 경우에 Fizz나 Buzz를 출력하면 된다.
우선, 주어진 문자 i에는 숫자가 1개 이상 들어온다.
3번의 문자가 주어지는데 이 중 숫자로 1번 이상 입력을 받는다.
이를 통해 아래와 같이 i 다음에 올 숫자를 구할 수 있다.
- 1번째 Buzz, 2번째 Fizz, 3번째 7을 입력받을 경우
- 3번째로 숫자를 입력받았으니 +1을 한 8이 다음 숫자가 된다.
- 1번째 8, 2번째 Fizz, 3번째 Buzz를 입력받을 경우
- 1번째로 숫자를 입력받았으니 +3을 한 11이 다음 숫자가 된다.
숫자가 j번째로 나왔을 경우 3 - j을 더한 값이 다음에 올 숫자가 된다는것을 알 수 있다.
이런식으로 다음에 올 숫자를 구하고 3, 5로 나눠지는지 확인하여 Fizz, Buzz, FizzBuzz 유무를 확인하면 된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] arr = new String[3];
int nextNum = 0;
for (int i = 0; i < 3; i ++) {
arr[i] = br.readLine();
if (checkNum(arr[i])) {
nextNum = (Integer.parseInt(arr[i]) + (3 - i));
}
}
System.out.println(checkFizzBuzz(nextNum));
}
public static boolean checkNum(String str) {
if (str.matches("[+-]?\\d*(\\.\\d+)?")) {
return true;
}
return false;
}
public static String checkFizzBuzz(int nextNum) {
if (nextNum % 3 == 0 && nextNum % 5 == 0) {
return "FizzBuzz";
}
else if (nextNum % 3 == 0) {
return "Fizz";
}
else if (nextNum % 5 == 0){
return "Buzz";
}
return Integer.toString(nextNum);
}
}
코드 풀이
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] arr = new String[3];
int nextNum = 0;
for (int i = 0; i < 3; i ++) {
arr[i] = br.readLine();
if (checkNum(arr[i])) {
nextNum = (Integer.parseInt(arr[i]) + (3 - i));
}
}
System.out.println(checkFizzBuzz(nextNum));
}
arr
에 문자열 3개를 입력받을 용도로 String형으로 선언하고, nextNum에는 3의 배수, 5의 배수를 확인하기 위해 int형으로 선언했다.- for를 통해 3개의 문자열을 입력받으면서, checkNum 함수를 통해 문자열이 숫자인지 확인한다.
- 숫자라면 String이기 때문에 int형으로 바꿔서 i번째 다음에 올 숫자를 구한다.
- 이때 추후에 다음에 올 숫자가 3, 5의 배수인지 확인을 위해 int로 바꿔준다.
public static boolean checkNum(String str) {
if (str.matches("[+-]?\\d*(\\.\\d+)?")) {
return true;
}
return false;
}
- 문자열이 숫자인지 확인하기 위해 정규식을 사용했다.
public static String checkFizzBuzz(int nextNum) {
if (nextNum % 3 == 0 && nextNum % 5 == 0) {
return "FizzBuzz";
}
else if (nextNum % 3 == 0) {
return "Fizz";
}
else if (nextNum % 5 == 0){
return "Buzz";
}
return Integer.toString(nextNum);
}
- i번째 다음에 올 숫자가 3, 5 배수인지 확인하기 위한 함수다.
- String 함수기 때문에 3, 5 배수가 아니더라도 toString으로 형변환을 해서 리턴했다.
728x90
'백준 문제풀이' 카테고리의 다른 글
[Baekjoon 18110] solved.ac - JAVA (0) | 2025.02.25 |
---|---|
[Baekjoon 30802] 웰컴 키트 - Java (0) | 2025.02.19 |
[Baekjoon 14719] 빗물- JAVA (0) | 2025.02.10 |
[Baekjoon 16928] 뱀과 사다리 게임 - JAVA (0) | 2025.02.02 |
[Baekjoon 33254] Hurry the Hedgehog - JAVA (0) | 2025.01.31 |