트랙
/
Swift
Swift
/
연습 문제
/
날개 퀘스트
날개 퀘스트

날개 퀘스트

학습 연습 문제

소개

Swift에는 참과 거짓을 나타내는 내장 타입 Bool이 있어요. 이 타입이 표현하는 값은 true와 false예요.

논리 연산자

Swift는 불리언 식을 조합하고 평가할 수 있도록 세 가지 논리 연산자 (!, &&, ||)를 제공해요.

논리 AND (&&)

AND 연산자 (&&)는 두 피연산자가 모두 true일 때만 true를 반환해요. 피연산자 중 하나라도 false이면 false를 반환해요. && 기호의 양쪽에 식이나 불리언 값을 놓아요:

true && true  // true
true && false // false

논리 OR (||)

OR 연산자 (||)는 피연산자 중 하나 이상이 true이면 true를 반환해요. 두 피연산자가 모두 false일 때만 false를 반환해요. || 기호의 양쪽에 식이나 불리언 값을 놓아요:

true || true   // true
true || false  // true
false || false // false

논리 NOT (!)

NOT 연산자 (!)는 불리언 값을 뒤집어요. 값이 false이면 true를 반환하고, 값이 true이면 false를 반환해요. 값이나 식 바로 앞에 ! 연산자를 놓아요:

!true  // false
!false // true

괄호 사용하기 (())

괄호를 사용하면 식을 묶고 평가 순서를 제어할 수 있어요. Swift에서는 괄호 안의 식이 먼저 평가돼요:

true && false && false || true   // true
true && false && (false || true) // false

괄호로 묶으면 NOT 연산자가 복잡한 식에 어떻게 적용되는지도 정해져요:

!true && false   // false (evaluates (!true) first, then false && false)
!(true && false) // true  (evaluates (true && false) first to false, then !false)
Note

평가 순서를 분명히 하거나 복잡한 조건을 읽기 쉽게 만들고 싶을 때는 괄호를 사용해요. 기본 우선순위만으로 이미 분명하다면 불필요한 괄호는 넣지 않아요.

지침

지금 큰 인기를 끌게 될 새로운 게임 Wings Quest를 개발하는 중이에요. 이 게임에서 플레이어는 이리저리 움직이며 씨앗을 모으는 새예요. 플레이어는 모든 씨앗을 주우면 게임에서 이겨요. 플레이어가 독수리에 닿으면 씨앗을 모두 잃고 게임에서 지게 돼요. 이 규칙에는 예외가 하나 있어요. 플레이어가 파워업을 활성화한 상태라면 다른 새들보다 더 높이 날 수 있어요.

목표는 게임에서 사용될 규칙 몇 가지를 작성하는 거예요.

1. 새가 보너스 점수를 받는지 정의하기

게임에서 새는 파워업을 가진 상태로 독수리에 닿으면 보너스 점수를 받아요.

두 개의 인자를 받는 함수 bonusPoints(powerUpActive:touchingEagle:)를 정의해요. powerUpActive는 새가 활성화된 파워업을 가지고 있는지를 담고, touchingEagle은 새가 독수리에 닿아 있는지를 담아요. 이 함수는 새가 파워업을 활성화한 상태이며 독수리에 닿아 있을 때에만 true를 반환하고, 그렇지 않으면 false를 반환해야 해요.

bonusPoints(powerUpActive: false, touchingEagle: true)
// Returns false

2. 새가 점수를 얻는지 정의하기

게임에서 플레이어는 씨앗이나 파워업을 주우면 점수를 얻어요.

두 개의 인자를 받는 함수 score(touchingPowerUp:touchingSeed:)를 정의해요. touchingPowerUp은 새가 파워업에 닿아 있는지를 담고, touchingSeed는 새가 씨앗에 닿아 있는지를 담아요. 이 함수는 새가 파워업이나 씨앗에 닿아 있으면 true를 반환하고, 그렇지 않으면 false를 반환해야 해요.

score(touchingPowerUp: true, touchingSeed: true)
// Returns true

3. 새가 지는지 정의하기

두 개의 인자를 받는 함수 lose(powerUpActive:touchingEagle:)를 정의해요. powerUpActive는 새가 활성화된 파워업을 가지고 있는지를 담고, touchingEagle은 새가 독수리에 닿아 있는지를 담아요. 이 함수는 새가 독수리에 닿아 있고 활성화된 파워업이 없으면 true를 반환하고, 그렇지 않으면 false를 반환해야 해요.

lose(powerUpActive: false, touchingEagle: true)
// Returns true

4. 새가 이기는지 정의하기

다음 인자들을 받는 win(hasPickedUpAllSeeds:powerUpActive:touchingEagle:) 함수를 정의해요.

  • hasPickedUpAllSeeds는 새가 모든 씨앗을 주웠는지 여부를 나타내요.
  • powerUpActive는 새가 파워업을 활성화했는지 여부를 나타내요.
  • touchingEagle은 새가 독수리에 닿아 있는지 여부를 나타내요.

이 함수는 새가 모든 씨앗을 모았고 3번에서 정의한 인자들에 따라 지지 않은 경우에 true를 반환하고, 그렇지 않으면 false를 반환해야 해요.

win(hasPickedUpAllSeeds: false, powerUpActive: true, touchingEagle: false)
// Returns false
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Swift Exercism

날개 퀘스트 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Swift 트랙을 개념 35개연습 문제 116개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.