코딩테스트

백준 #28702 FizzBuzz

우주속공간 2024. 6. 13. 19:54

https://www.acmicpc.net/problem/28702

 

 

문제

FizzBuzz 문제는 𝑖=1,2,⋯ 에 대해 다음 규칙에 따라 문자열을 한 줄에 하나씩 출력하는 문제입니다.

  •  𝑖가 3의 배수이면서 5의 배수이면 “FizzBuzz”를 출력합니다.
  •  𝑖가 3의 배수이지만 5의 배수가 아니면 “Fizz”를 출력합니다.
  •  𝑖가 3의 배수가 아니지만 5의 배수이면 “Buzz”를 출력합니다.
  •  𝑖가 3의 배수도 아니고 5의 배수도 아닌 경우 𝑖를 그대로 출력합니다.

FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열이 주어집니다. 이때, 이 세 문자열 다음에 올 문자열은 무엇일까요?

입력

FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열이 한 줄에 하나씩 주어집니다. 각 문자열의 길이는 8 이하입니다. 입력이 항상 FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열에 대응됨이 보장됩니다.

출력

연속으로 출력된 세 개의 문자열 다음에 올 문자열을 출력하세요. 여러 문자열이 올 수 있는 경우, 아무거나 하나 출력하세요.

 

 

 

풀이과정

내가 생각한 과정

1. 3개의 문자열 중에 적어도 하나는 숫자 존재하는 것과 서로 연속하는 숫자가 온다는 것을 활용

2. 그래서 마지막 3번째열이 숫자인지 문자인지를 구별해서 답 도출하기

3. 숫자라면 +1을 해서 답을 반환하고 문자라면 첫번째, 두번째열이 어떤 값을 가지고 있는 확인하고 그에 따라 맞는 답 도출하기

 

내가 작성한 코드

const fs = require('fs'); // fs 모듈을 불러와 파일 시스템과 상호작용합니다.

// 표준 입력을 읽습니다.
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
let answer = 0

if(input[2] !== 'FizzBuzz' && input[2] !== 'Fizz' && input[2] !== 'Buzz'){
    answer = parseInt(input[2])+1
}else if(input[2] == 'FizzBuzz' || input[2] == 'Fizz' || input[2] == 'Buzz'){
      if (input[1] !== 'FizzBuzz' && input[1] !== 'Fizz' && input[1] !== 'Buzz') {
        answer = parseInt(input[1]) + 2;
    } else {
        answer = parseInt(input[0]) + 3;
    }
}

if(answer % 15 == 0){
    console.log('FizzBuzz')
}else if(answer % 3 == 0 ){
    console.log('Fizz')
}else if(answer % 5 == 0){
    console.log('Buzz')
}else{
    console.log(answer)
}

 

개선한 코드 - 조건문 단순화 및 가독성 향상

const fs = require('fs'); // fs 모듈을 불러와 파일 시스템과 상호작용합니다.

// 표준 입력을 읽습니다.
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
let answer = 0;

// 주어진 세 번째 문자열에 따라 answer 값을 설정합니다.
if (input[2] !== 'FizzBuzz' && input[2] !== 'Fizz' && input[2] !== 'Buzz') {
    // 세 번째 문자열이 숫자인 경우
    answer = parseInt(input[2]) + 1;
} else {
    // 세 번째 문자열이 'FizzBuzz', 'Fizz' 또는 'Buzz'인 경우
    if (input[1] !== 'FizzBuzz' && input[1] !== 'Fizz' && input[1] !== 'Buzz') {
        // 두 번째 문자열이 숫자인 경우
        answer = parseInt(input[1]) + 2;
    } else {
        // 첫 번째 문자열이 숫자인 경우
        answer = parseInt(input[0]) + 3;
    }
}

// FizzBuzz 규칙에 따라 출력합니다.
if (answer % 15 === 0) {
    console.log('FizzBuzz');
} else if (answer % 3 === 0) {
    console.log('Fizz');
} else if (answer % 5 === 0) {
    console.log('Buzz');
} else {
    console.log(answer);
}