알고리즘 공부/C++

백준 28702번 FizzBuzz C++

마달랭 2024. 7. 16. 13:59
반응형

리뷰

문제에 대한 이해가 잘 되지 않아 풀이에 생각보다 시간이 오래 걸렸다. 브론즈 문제 아닌거같은데..

 

문제 풀이

  1. 받아온 문자열을 정수로 변환해 주는 함수 to_int를 작성해 주고 받아온 문자열 세개를 각각 함수를 돌려준다.
  2. 만약 문자열이 FizzBuzz 라면 -15를 리턴, Fizz라면 -3, Buzz라면 -5를 리턴해 준다.
  3. 아무것도 해당이 되지 않으면 문자열을 정수형으로 바꾸어 리턴
  4. 정답 변수를 정수형으로 초기화 하고 만약 첫번째 문자열이 0이상 즉, Fizz나 Buzz나 FizzBuzz가 아닐 경우 3을 더한값을 정답 변수에 할당해 준다, 두번째 문자열일 경우 +2, 세번째 문자열일 경우 +1
  5. to_str 함수를 작성하고 정답 변수에 저장된 정수가 15의 배수면 FizzBuzz, 3의 배수면 Fizz, 5의 배수면 Buzz 세가지 조건 모두 해당하지 않을 경우 정수를 문자열로 바꾸어 리턴한다.
  6. to_str 함수의 리턴값을 출력해 주면 된다.

 

참고 사항

정수형 문자열로 입력된 데이터의 인덱스를 잘 확인하자

 

 

정답 코드

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

int to_int(string s) {
	if (s == "FizzBuzz") return -15;
	if (s == "Fizz") return -3;
	if (s == "Buzz") return -5;
	return stoi(s);
}

string to_str(int n) {
	if (n % 3 == 0 && n % 5 == 0) return "FizzBuzz";
	if (n % 3 == 0) return "Fizz";
	if (n % 5 == 0) return "Buzz";
	else return to_string(n);
}

int main() {
	string a, b, c;
	cin >> a >> b >> c;
	int d = to_int(a);
	int e = to_int(b);
	int f = to_int(c);
	int ans;
	if (d >= 0) ans = d + 3;
	if (e >= 0) ans = e + 2;
	if (f >= 0) ans = f + 1;
	cout << to_str(ans);
}

 

 

728x90
반응형