FizzBuzz 문제는
i = 1, 2, ... 에 대해 다음 규칙에 따라 문자열을 한 줄에 하나씩 출력하는 문제입니다.
i가
3의 배수이면서
5의 배수이면 “FizzBuzz”를 출력합니다.
i가
3의 배수이지만
5의 배수가 아니면 “Fizz”를 출력합니다.
i가
3의 배수가 아니지만
5의 배수이면 “Buzz”를 출력합니다.
i가
3의 배수도 아니고
5의 배수도 아닌 경우
i를 그대로 출력합니다.
FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열이 주어집니다. 이때, 이 세 문자열 다음에 올 문자열은 무엇일까요?
FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열이 한 줄에 하나씩 주어집니다. 각 문자열의 길이는
8이하입니다. 입력이 항상 FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열에 대응됨이 보장됩니다.
연속으로 출력된 세 개의 문자열 다음에 올 문자열을 출력하세요. 여러 문자열이 올 수 있는 경우, 아무거나 하나 출력하세요.
입력값 => 출력값
Fizz
Buzz
11 => Fizz
980803
980804
FizzBuzz => 980806
a, b, c를 생성하여 3개 문자열 모두 각각 할당한다.4번 예시
[Fizz, Buzz, 11]에서 11은 index=2
첫 번째 값 = 11 - 2 = 9
검증: 9(Fizz), 10(Buzz), 11 ✅
[980803, 980804, FizzBuzz]에서 980803은 index=0
첫 번째 값 = 980803 - 0 = 980803
검증: 980803, 980804, 980805(FizzBuzz) ✅
const fs = require("fs");
const input = fs.readFileSync(0, "utf8").trim().split("\n");
function getNextFizzBuzz(x) {
if (x % 15 === 0) return "FizzBuzz";
if (x % 3 === 0) return "Fizz";
if (x % 5 === 0) return "Buzz";
return String(x);
}
// 입력된 세 문자열
const a = input[0].trim();
const b = input[1].trim();
const c = input[2].trim();
// 세 문자열 중 숫자인 값을 찾기
const arr = [a, b, c];
let startNum = null;
for (let i = 0; i < 3; i++) {
if (!isNaN(Number(arr[i]))) {
startNum = Number(arr[i]) - i; // i번째 값이 숫자라면 전체 시작 값 추정
break;
}
}
// 시작 값부터 a,b,c 순으로 증가시킴
if (startNum === null) {
// 숫자가 없는 경우, 3개의 문자열의 위치를 기반으로 시작 값 추론
// 가장 가까운 패턴 맞는 값을 찾기 위해 1~100 중 탐색 (보장됨)
for (let guess = 1; guess <= 100; guess++) {
if (
getNextFizzBuzz(guess) === a &&
getNextFizzBuzz(guess + 1) === b &&
getNextFizzBuzz(guess + 2) === c
) {
startNum = guess;
break;
}
}
}
// 다음 값 계산
const nextValue = startNum + 3;
console.log(getNextFizzBuzz(nextValue));