Fizz Buzz는 아이들에게 나눗셈을 가르치기 위한 단체 단어 게임이다. 참가자들은 차례대로 숫자를 세며, 3으로 나누어 떨어지는 숫자는 "fizz"로, 5로 나누어 떨어지는 숫자는 "buzz"로 바꾼다.
Fizz Buzz는 컴퓨터 프로그래머를 위한 인터뷰 선별 도구로도 사용된다.
일반적인 Fizz Buzz의 결과는 다음과 같다:
1
, 2
, Fizz
, 4
, Buzz
, Fizz
, 7
, 8
, Fizz
, Buzz
, 11
, Fizz
, 13
, 14
, Fizz Buzz
, 16
, 17
, Fizz
, 19
, Buzz
, Fizz
, 22
, 23
, Fizz
, Buzz
, 26
, Fizz
, 28
, 29
, Fizz Buzz
, 31
, 32
, Fizz
, 34
, Buzz
, Fizz
, ...
모듈로 연산자 %
는 fizz buzz 문제를 해결하는 핵심이다.
모듈로 연산자는 정수 나눗셈 후 남은 나머지를 반환한다. 다음은 모듈로 연산자의 예제다:
나눗셈 | 나눗셈 결과 | 모듈로 | 모듈로 결과 |
---|---|---|---|
1 / 3 | 0, 나머지 3 | 1 % 3 | 1 |
5 / 3 | 1, 나머지 2 | 5 % 3 | 2 |
16 / 3 | 5, 나머지 1 | 16 % 3 | 1 |
숫자가 짝수인지 홀수인지 판단하는 일반적인 방법은 모듈로 연산자를 사용하는 것이다:
모듈로 | 결과 | Swift 코드 | Swift 코드 결과 |
설명 |
---|---|---|---|---|
6 % 2 | 0 | let isEven = (number % 2 == 0) |
true |
숫자가 2로 나누어 떨어지면 짝수다 |
5 % 2 | 1 | let isOdd = (number % 2 != 0) |
true |
숫자가 2로 나누어 떨어지지 않으면 홀수다 |
또는 Swift의 내장 함수인 .isMultiple(of:)을 사용할 수 있다. 예를 들어, 6.isMultiple(of: 2)는 true를 반환하고, 5.isMultiple(of: 2)는 false를 반환한다.
이제 모듈러스 연산자 %
또는 .isMultiple(of:) 메서드를 사용해 Fizz Buzz 문제를 해결할 수 있다.
3으로 나누어 떨어지는 숫자를 찾는 방법:
모듈러스 | 모듈러스 결과 |
모듈러스 사용 Swift 코드 |
.isMultiple(of:) 사용 Swift 코드 |
Swift 코드 결과 |
---|---|---|---|---|
1 % 3 | 1 | 1 % 3 == 0 |
1.isMultiple(of: 3) |
false |
2 % 3 | 2 | 2 % 3 == 0 |
2.isMultiple(of: 3) |
false |
3 % 3 | 0 | 3 % 3 == 0 |
3.isMultiple(of: 3) |
true |
4 % 3 | 1 | 4 % 3 == 0 |
4.isMultiple(of: 3) |
false |
5로 나누어 떨어지는 숫자를 찾는 방법:
모듈러스 | 모듈러스 결과 |
모듈러스 사용 Swift 코드 |
.isMultiple(of:) 사용 Swift 코드 |
Swift 코드 결과 |
---|---|---|---|---|
1 % 5 | 1 | 1 % 5 == 0 |
1.isMultiple(of: 5) |
false |
2 % 5 | 2 | 2 % 5 == 0 |
2.isMultiple(of: 5) |
false |
3 % 5 | 3 | 3 % 5 == 0 |
3.isMultiple(of: 5) |
false |
4 % 5 | 4 | 4 % 5 == 0 |
4.isMultiple(of: 5) |
false |
5 % 5 | 0 | 5 % 5 == 0 |
5.isMultiple(of: 5) |
true |
6 % 5 | 1 | 6 % 5 == 0 |
6.isMultiple(of: 5) |
false |
Swift에서 Modulus 방식을 사용한 간단한 구현은 다음과 같다.
func fizzBuzz(_ numberOfTurns: Int) {
for i in 1...numberOfTurns {
var result = ""
if i % 3 == 0 {
result += "Fizz"
}
if i % 5 == 0 {
result += (result.isEmpty ? "" : " ") + "Buzz"
}
if result.isEmpty {
result += "\(i)"
}
print(result)
}
}
Swift에서 .isMultiple(of:)와 switch 문을 사용한 간단한 구현은 다음과 같다.
func fizzBuzz(_ numberOfTurns: Int) {
guard numberOfTurns >= 1 else {
print("Number of turns must be >= 1")
return
}
for i in 1...numberOfTurns {
switch (i.isMultiple(of: 3), i.isMultiple(of: 5)) {
case (false, false):
print("\(i)")
case (true, false):
print("Fizz")
case (false, true):
print("Buzz")
case (true, true):
print("Fizz Buzz")
}
}
}
위 코드 중 하나를 플레이그라운드에 넣고 다음과 같이 테스트한다.
fizzBuzz(15)
출력 결과는 다음과 같다.
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
Fizz Buzz
원본 작성자: Chris Pilcher
업데이트 담당: Lance Rettberg