BAEKJOON/수학

백준 28702번 [FizzBuzz](C++)-yes6686- 티스토리

yes6686 2024. 12. 27. 00:28
728x90
반응형
SMALL

백준 문제 풀이: 28702 [FizzBuzz]


문제 링크: https://www.acmicpc.net/problem/28702

문제 설명:

입력된 3개의 문자열 중 숫자를 찾아 특정 연산을 수행한 결과에 따라 "Fizz", "Buzz", "FizzBuzz", 또는 숫자를 출력합니다. 여기서 중요한 점은, 숫자가 3의 배수, 5의 배수, 15의 배수(3과 5의 공배수)에 대해 **연속해서 발생할 일이 없기 때문**에, 단순 조건을 순차적으로 확인하는 방식이 가능합니다.

입력:

  • 3개의 문자열이 공백으로 구분되어 한 줄로 주어집니다.
  • 문자열은 "Fizz", "Buzz" 또는 숫자로 구성됩니다.

출력:

  • 계산된 값이 3과 5의 배수면 "FizzBuzz",
  • 3의 배수면 "Fizz",
  • 5의 배수면 "Buzz",
  • 그 외의 경우 계산된 값을 출력합니다.

문제 해결 코드


#include <iostream>
#include <string>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    int ans = 0;
    string s;

    // 입력된 문자열 중 숫자를 찾고 처리
    for (int i = 0; i < 3; i++) {
        cin >> s;
        if (s[0] != 'F' && s[0] != 'B') { // 숫자인 경우 처리
            ans = stoi(s) + (3 - i); // 숫자에 (3 - 위치)를 더함
        }
    }

    // FizzBuzz 조건에 따라 출력
    if (ans % 3 == 0 && ans % 5 == 0) {
        cout << "FizzBuzz" << '\n';
    } else if (ans % 3 == 0) {
        cout << "Fizz" << '\n';
    } else if (ans % 5 == 0) {
        cout << "Buzz" << '\n';
    } else {
        cout << ans << '\n';
    }

    return 0;
}

예제

입력:
10 Fizz Buzz

출력:
FizzBuzz
입력:
7 Buzz Fizz

출력:
Buzz
입력:
4 Fizz Buzz

출력:
7

코드 설명

  • 숫자 판별:
    • 입력 문자열이 "Fizz"나 "Buzz"가 아니면 숫자로 간주하고 처리합니다.
    • 숫자일 경우 stoi()를 사용해 정수로 변환하고, 현재 반복 위치에 따라 값을 보정합니다.
  • FizzBuzz 판별:
    • 계산된 값이 3과 5의 배수인지 순차적으로 확인하여 조건에 따라 출력합니다.

시간 복잡도

  • 문자열 비교 및 정수 변환: O(1)
  • 총 입력 크기가 작아 상수 시간 안에 처리가 가능합니다.

결과

코드는 입력된 문자열을 정확히 처리하며, FizzBuzz 규칙에 따라 올바른 출력을 제공합니다. 간결한 조건 처리로 효율적입니다.

다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!

728x90
반응형
LIST