백준 28702번 'FizzBuzz' - Python

림민지·2025년 1월 20일

#️⃣ 28702번

문제

FizzBuzz 문제는 i= 1,2, 에 대해 다음 규칙에 따라 문자열을 한 줄에 하나씩 출력하는 문제입니다.
• 2가 3의 배수이면서 5의 배수이면 " F1zzBUzz "를 출력합니다.
• 2가 3의 배수이지만 5의 배수가 아니면 " Fizz "를 출력합니다.
• 2가 3의 배수가 아니지만 5의 배수이면 " Buzz "를 출력합니다.
• 2가 3의 배수도 아니고 5의 배수도 아닌 경우 8를 그대로 출력합니다.
FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열이 주어집니다.
이때, 이 세 문자열 다음에 올 문자열은 무엇일까요?

입력

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

출력

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


🔮 풀이

✏️ 내 풀이

3, 5, 15의 배수가 연속되서 나오지 않으니까 3개중에 하나는 반드시 숫자일거라고 생각했다.
3개의 문자열을 입력받고, if문을 사용해서 Fizz, Buzz, FizzBuzz 중에 하나라도 해당되면 배제해버리고, 숫자이 값만 받아서 리스트에 추가! 그리고 그 숫자의 인덱스도 따로 저장했다.
그 숫자 + 숫자의 번호를 이용하면 그 다음 나올 숫자를 알 수 있기 때문!!

n1 = input()
n2 = input()
n3 = input()

L = []
L.append(n1)
L.append(n2)
L.append(n3)
P = []
N =[]

for i in range(3) :
    if L[i] == "Fizz" :
        L[i] = 3
    elif L[i] == "Buzz" :
        L[i] = 5
    elif L[i] =="FizzBuzz" :
        L[i] = 15
    else :
        L[i] = int(L[i])
        P.append(L[i])
        N.append(i)

if N[0] ==0 :
    k = P[0] + 3
elif N[0] == 1 :
    k = P[0] + 2
else :
    k = P[0] + 1

if k %3 ==0 :
    if k%5==0 :
        print("FizzBuzz")
    else :
        print("Fizz")
elif k%5 ==0:
    print("Buzz")
else :
    print(k)

이렇게 코딩했는데 너무 코드가 길기도 했고, 뭔가 개선할 수 있는 방법이 분명히 있을 것 같았다.

그래서 나의 온라인 선생님, GPT에게 헬프를 외쳤다.

🤖 GPT님의 리팩토링

  1. 입력을 한 줄로 받기
inputs = [input() for _ in range(3)]
  1. 리스트 조작 간소화
    불필요하게 P와 N 리스트를 분리하지 않고 positions에 필요한 정보만 저장
positions = []  # 숫자의 위치를 저장

# 첫 번째 숫자의 위치에 따라 계산
k = inputs[positions[0]] + (3 - positions[0])

💡전체 코드

inputs = [input() for _ in range(3)]  # 입력을 한 줄로 처리
positions = []  # 숫자의 위치를 저장

# 입력 처리
for i in range(3):
    if inputs[i] == "Fizz":
        inputs[i] = 3
    elif inputs[i] == "Buzz":
        inputs[i] = 5
    elif inputs[i] == "FizzBuzz":
        inputs[i] = 15
    else:
        inputs[i] = int(inputs[i])
        positions.append(i)

# 첫 번째 숫자의 위치에 따라 계산
k = inputs[positions[0]] + (3 - positions[0])

# 결과 출력
if k % 15 == 0:
    print("FizzBuzz")
elif k % 3 == 0:
    print("Fizz")
elif k % 5 == 0:
    print("Buzz")
else:
    print(k)
profile
@lim_128

0개의 댓글