# 코사인으로 푸는 FizzBuzz 문제 – 초보자도 바로 따라 할 수 있는 파이썬 구현

---

# # 📌 서론: 왜 FizzBuzz인가?

프로그래밍 입문자라면 **FizzBuzz** 문제를 한 번쯤은 들어봤을 겁니다.

1부터 100까지 숫자를 출력하되,

- 3의 배수 → “Fizz”

- 5의 배수 → “Buzz”

- 15의 배수 → “FizzBuzz”

를 대신 출력하는 아주 간단한 과제죠.

하지만 이 간단함 뒤에는 **조건문**과 **모듈러 연산**을 연습할 수 있는 좋은 학습 재료가 숨겨져 있습니다.

이번 포스트에서는 기존 방법을 넘어 **코사인 함수**(cosine)를 이용해 같은 결과를 만드는 **수학적 트릭**을 소개합니다.

> **SEO 키워드**: FizzBuzz, 코사인 함수, 파이썬 구현

---

# # 1️⃣ 전통적인 FizzBuzz 구현 (복습)

```
python

for i in range(1, 101):

    if i % 15 == 0:

        print('FizzBuzz')

    elif i % 3 == 0:

        print('Fizz')

    elif i % 5 == 0:

        print('Buzz')

    else:

        print(i)

```

- `i % n` 은 **i가 n의 배수인지**를 판단하는 가장 직관적인 방법입니다.

- 초보자에게는 이해가 쉽지만, 매번 **세 번의 나눗셈**을 수행한다는 점을 기억해 주세요.

---

# # 2️⃣ 코사인으로 배수 판별하기

## # 2.1 코사인 함수의 특성

코사인 함수 `cos(θ)`는 **θ가 π(파이)의 정수배**일 때 `±1` 값을 가집니다.

이를 이용하면 다음과 같은 식을 만들 수 있습니다.

- `cos(π * n / 3)` → n이 **3의 배수**이면 `cos` 값은 `-1`

- `cos(π * n / 5)` → n이 **5의 배수**이면 `-1`

부동소수점 연산 특성상 `-1` 근처의 값이 나오므로 `round()` 로 반올림해 `-1` 혹은 `1` 로 구분합니다.

## # 2.2 파이썬 코드 예시

```
python

import math

def fizzbuzz_cosine(n: int) -> str:

    # 코사인 값은 -1 혹은 1에 가깝다 → round 로 정수화

    c3  = round(math.cos(math.pi * n / 3))   # 3의 배수면 -1

    c5  = round(math.cos(math.pi * n / 5))   # 5의 배수면 -1

    c15 = round(math.cos(math.pi * n / 15))  # 15의 배수면 -1

    if c15 == -1:          # 15의 배수 → FizzBuzz

        return 'FizzBuzz'

    elif c3 == -1:         # 3의 배수 → Fizz

        return 'Fizz'

    elif c5 == -1:         # 5의 배수 → Buzz

        return 'Buzz'

    else:

        return str(n)

```

- `c15` 를 가장 먼저 검사하면 **FizzBuzz** 가 우선 출력됩니다.

- `c3`, `c5` 순서대로 검사하면 각각 **Fizz**, **Buzz** 가 출력됩니다.

## # 2.3 전체 실행 예시

```
python

for i in range(1, 31):

    print(fizzbuzz_cosine(i))

```

출력은 기존 구현과 **완전히 동일**합니다.

```

1
2

Fizz

4
Buzz

Fizz

7
8

Fizz

Buzz

11

Fizz

13

14

FizzBuzz

...

```

---

# # 3️⃣ 왜 코사인을 사용해야 할까?

| 장점 | 설명 |

|------|------|

| **수학적 아름다움** | 삼각함수를 활용해 조건을 판별하므로, 프로그래밍과 수학이 만나는 재미를 느낄 수 있다. |

| **조건문 수 감소** | `if‑elif‑else` 구조는 그대로 유지하지만, **모듈러 연산**을 없앨 수 있다. |

| **학습 확장성** | 코사인 외에도 `sin`, `tan` 등을 조합해 다양한 패턴을 만들 수 있다. |

실제 성능 차이는 미미하지만, **코드에 새로운 아이디어**를 도입하고 싶을 때 좋은 연습이 됩니다.

---

# # 4️⃣ 초보자를 위한 팁

1. **`round()` 를 꼭 사용하세요**

   코사인은 부동소수점 오차가 있기 때문에 `round()` 로 `-1` 혹은 `1` 로 명확히 구분해야 합니다.

2. **`math` 모듈을 미리 임포트**

   `import math` 를 빼먹으면 `NameError` 가 발생합니다.

3. **디버깅 시 `print` 로 값 확인**

   
```
python

   print(n, c3, c5, c15)   # 각 배수 판별 결과 확인

   
```

   이렇게 하면 어떤 숫자가 어떤 배수로 인식되는지 바로 알 수 있습니다.

4. **다른 언어에도 적용해 보기**

   JavaScript, Java, C# 등에서도 `Math.cos` 와 `Math.PI` 를 이용하면 동일한 로직을 구현할 수 있습니다.

---

# # 🚀 결론 – 코사인으로 만든 FizzBuzz, 이제 직접 실행해 보세요!

- **FizzBuzz** 라는 기본 문제를 **코사인 함수**로 풀어보면서 프로그래밍과 수학이 어떻게 결합되는지 체험했습니다.

- 초보자도 **파이썬 구현** 예제를 따라 하면 바로 동작하는 코드를 만들 수 있습니다.

- 마지막으로, **조건 판단**에 다양한 수학 함수를 적용해 보는 연습을 하면 알고리즘 사고력이 크게 향상됩니다.

> **행동 유도**: 오늘 당장 위 코드를 복사해 파이썬 인터프리터에 붙여넣고 실행해 보세요. 그리고 직접 `sin` 혹은 `tan` 으로 변형해 보는 실험을 통해 자신만의 “수학‑코딩” 레시피를 만들어 보시길 바랍니다! 🎉
