코딩테스트
백준 #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);
}