트랙
/
F#
F#
/
연습 문제
/
애널린의 잠입
애널린의 잠입

애널린의 잠입

학습 연습 문제

소개

불리언

F#에서 불리언은 bool 타입으로 표현해요. 값은 true 또는 false예요.

F#은 세 가지 불리언 연산자를 지원해요: not (NOT), && (AND), || (OR).

지침

이 연습 문제에서는 친구가 개발 중인 새로운 RPG 게임의 퀘스트 로직을 구현해요. 게임의 주인공은 애널린이에요. 용감한 소녀인 그녀에게는 사납고 충직한 반려견이 있어요. 안타깝게도 가장 친한 친구가 숲에서 열매를 찾다가 납치되는 불행이 닥쳐요. 애널린은 가장 친한 친구를 찾아 풀어주려고 해요. 원한다면 이 여정에 반려견을 데리고 갈 수도 있어요.

가장 친한 친구의 흔적을 얼마간 따라간 끝에, 애널린은 친구가 갇혀 있는 야영지를 발견해요. 알고 보니 납치범은 둘이에요. 강력한 기사와 교활한 궁수죠.

납치범들을 찾은 애널린은 다음과 같은 행동 중 어떤 것을 할 수 있을지 생각해요:

  • 빠른 공격: 기사가 잠들어 있다면 빠른 공격을 할 수 있어요. 기사는 갑옷을 입는 데 시간이 걸리기 때문에 그동안 취약하거든요.
  • 감시: 무리 중 적어도 한 명이 깨어 있다면 무리를 감시할 수 있어요. 그렇지 않으면 감시는 시간 낭비예요.
  • 죄수에게 신호 보내기: 죄수가 깨어 있고 궁수가 잠들어 있다면 새소리로 죄수에게 신호를 보낼 수 있어요. 궁수는 새소리 신호를 배웠기 때문에 메시지를 가로챌 수 있거든요.
  • 죄수 풀어주기: 애널린은 죄수를 풀어주기 위해 몰래 야영지에 들어가 볼 수 있어요. 이는 위험한 일이라 두 가지 방법 중 하나로만 성공할 수 있어요:
    • 애널린이 반려견과 함께 있다면 궁수가 잠들어 있을 때 죄수를 구할 수 있어요. 기사는 개를 무서워하고, 궁수는 애널린과 죄수가 도망치기 전에 준비할 시간이 없거든요.
    • 애널린이 반려견과 함께 있지 않다면, 애널린과 죄수는 아주 조심스럽게 움직여야 해요! 죄수가 깨어 있고 기사와 궁수가 모두 잠들어 있다면 애널린은 죄수를 풀어줄 수 있어요. 하지만 죄수가 잠들어 있다면 구할 수 없어요. 애널린이 갑자기 나타나면 죄수가 놀라서 기사와 궁수를 깨우고 말 거예요.

풀어야 할 과제는 네 가지예요. 숲에서 만난 세 인물의 상태와 애널린의 반려견이 함께 있는지 여부에 따라 위 행동들을 할 수 있는지 판단하는 로직을 구현해요.

1. 빠른 공격을 할 수 있는지 확인하기

기사가 깨어 있는지를 나타내는 불리언 값을 받는 canFastAttack 함수를 구현해요. 이 함수는 기사의 상태에 따라 빠른 공격을 할 수 있으면 true를 반환해요. 그렇지 않으면 false를 반환해요:

let knightIsAwake = true
canFastAttack(knightIsAwake)
// => false

2. 무리를 감시할 수 있는지 확인하기

기사, 궁수, 죄수가 각각 깨어 있는지를 나타내는 불리언 값 세 개를 받는 canSpy 함수를 구현해요. 이 함수는 세 인물의 상태에 따라 무리를 감시할 수 있으면 true를 반환해요. 그렇지 않으면 false를 반환해요:

let knightIsAwake = false
let archerIsAwake = true
let prisonerIsAwake = false
canSpy(knightIsAwake, archerIsAwake, prisonerIsAwake)
// => true

3. 죄수에게 신호를 보낼 수 있는지 확인하기

궁수와 죄수가 각각 깨어 있는지를 나타내는 불리언 값 두 개를 받는 canSignalPrisoner 함수를 구현해요. 이 함수는 두 인물의 상태에 따라 죄수에게 신호를 보낼 수 있으면 true를 반환해요. 그렇지 않으면 false를 반환해요:

let archerIsAwake = false
let prisonerIsAwake = true
canSignalPrisoner(archerIsAwake, prisonerIsAwake)
// => true

4. 죄수를 풀어줄 수 있는지 확인하기

불리언 값 네 개를 받는 canFreePrisoner 함수를 구현해요. 처음 세 매개변수는 기사, 궁수, 죄수가 각각 깨어 있는지를 나타내요. 마지막 매개변수는 애널린의 반려견이 함께 있는지를 나타내요. 이 함수는 세 인물의 상태와 애널린의 반려견 유무에 따라 죄수를 풀어줄 수 있으면 true를 반환해요. 그렇지 않으면 false를 반환해요:

let knightIsAwake = false
let archerIsAwake = true
let prisonerIsAwake = false
let petDogIsPresent = false
canFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent)
// => false
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
F# Exercism

애널린의 잠입 문제를 시작해 볼 준비가 됐나요?

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