반응형
문제
FizzBuzz 문제는 𝑖=1,2,⋯ 에 대해 다음 규칙에 따라 문자열을 한 줄에 하나씩 출력하는 문제입니다.
- 𝑖가 3의 배수이면서 5의 배수이면 “FizzBuzz”를 출력합니다.
- 𝑖가 3의 배수이지만 5의 배수가 아니면 “Fizz”를 출력합니다.
- 𝑖가 3의 배수가 아니지만 5의 배수이면 “Buzz”를 출력합니다.
- 𝑖가 3의 배수도 아니고 5의 배수도 아닌 경우 𝑖를 그대로 출력합니다.
FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열이 주어집니다. 이때, 이 세 문자열 다음에 올 문자열은 무엇일까요?
입력
FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열이 한 줄에 하나씩 주어집니다. 각 문자열의 길이는 8 이하입니다. 입력이 항상 FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열에 대응됨이 보장됩니다.
출력
연속으로 출력된 세 개의 문자열 다음에 올 문자열을 출력하세요. 여러 문자열이 올 수 있는 경우, 아무거나 하나 출력하세요.
예제 입력 1 복사
Fizz
Buzz
11
예제 출력 1 복사
Fizz
예제 입력 2 복사
980803
980804
FizzBuzz
예제 출력 2 복사
980806
이 문제를 처음봤을 때 3과의 5의 배수의 관계성에서 연속된 3개의 문자열을 입력받는다면 숫자가 무조건 한번 들어가게 된다는 규칙성이 떠올라서 야메? 느낌이지만 이 숫자가 한번들어가는 것 3개의 문자열의 1,2,3번 위치중에 어떤 위치인지 구하고 여기에 각각 3,2,1을 더해준다면 문자열 다음에 올 값이 어떤 값인지 알 수 있고 3개의 문자열에 올 숫자가 무엇인지 안다면 그 값만 최종적으로 Fizz인지 Buzz인지 FizzBuzz인지 숫자 그대로인지만 판단해준다면 끝이라고 생각되어 그렇게 풀이해보았다.
조금 소름돕는 건 야메풀이인줄 알았는데 다른 사람들의 풀이도 나와 같아 소름이 돋았다..
package BAEKJOON_28702;
import java.util.*;
public class BAEKJOON_28702 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] arr = new String[3]; // 문자열 3개는 필수로 받아야 함
int order = 1; // 숫자만 입력받는 문자열의 위치를 나타낼 변수를 선언
int OutputNum = 0; // 출력할 문자열의 원래 숫자를 저장할 변수를 선언
for(int i=0; i<3; i++) { // 연속된 문자열 3개를 입력받을 때 항상 Fizz와 숫자가 하나씩 있어야함 -> 숫자가 반드시 1개또는 2개 있어야하는 걸 이용
arr[i] = sc.nextLine();
// System.out.println(arr[i]); --> test
if(arr[i].matches("^[0-9]+$")) { // 입력받은 문자열중에 숫자를 입력받은 배열의 인덱스를 order에 저장
order = i+1;
// System.out.println(order); --> test
if( order == 1) {
OutputNum = Integer.parseInt(arr[0]) +3; // 출력해야하는 숫자의 원래 수는 order가 1이라면 arr[0]+3임
} else if (order == 2) {
OutputNum = Integer.parseInt(arr[1]) +2; // 출력해야하는 숫자의 원래 수는 order가 1이라면 arr[0]+2임
} else if (order == 3) {
OutputNum = Integer.parseInt(arr[2]) +1; // 출력해야하는 숫자의 원래 수는 order가 1이라면 arr[0]+1임
}
// System.out.println(OutputNum); --> test
}
}
if(OutputNum %3 == 0 && OutputNum % 5 == 0) { // 3과 5의 공배수이면 다음에 오는 문자열로 FizzBuzz 출력
System.out.println("FizzBuzz");
} else if ( OutputNum %3 == 0 && OutputNum %5 != 0) { // 3의 배수이면서 5의 배수가아니면 다음에 오는 문자열로 Fizz 출력
System.out.println("Fizz");
} else if (OutputNum %5 ==0 && OutputNum %3 != 0) { // 5의 배수이면서 3의 배수가아니면 다음에 오는 문자열로 Buzz 출력
System.out.println("Buzz");
} else { // 3의배수도 아니고 5의 배수도 아니면 다음에 오는 문자열로 OutputNum 출력
System.out.println(OutputNum);
}
}
}
반응형
'실습 > 백준' 카테고리의 다른 글
별 찍기 12 - 2522번 (Java 풀이) (0) | 2024.07.14 |
---|---|
문자와 문자열 - 27866번 (Java 풀이) (0) | 2024.07.14 |
평균 - 1546번 (Java 풀이) (1) | 2024.07.14 |
바구니 뒤집기 - 10811번 (Java 풀이) (1) | 2024.07.13 |
3052번 (Java 풀이) (0) | 2024.07.13 |