실습/백준

FizzBuzz - 28702번 (Java 풀이)

chobyeonggyu03 2024. 7. 14. 02:00
반응형

문제

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