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

애널린의 잠입

학습 연습 문제

소개

불리언

Bool 타입은 언어의 기본 구성 요소 중 하나예요. 어떤 것이 참인지 거짓인지 나타내는 데 사용되며, 각각 True와 False 값을 가져요.

불리언은 &&(AND)와 ||(OR) 연산자로 결합할 수 있고, not 함수로 부정할 수 있어요.

불리언은 특정 조건이 충족될 때만 실행되는 분기를 만들 때도 아주 유용해요. Elm에서는 if-then-else 표현식으로 분기를 만들어요. 다음과 같이 사용해요.

if someCondition || (someOtherCondition && anotherCondition) then
    doSomething
else
    doSomethingElse

지침

이 연습 문제에서는 친구가 개발 중인 새로운 RPG 게임의 퀘스트 로직을 구현해요. 게임의 주인공은 사납지만 충직한 반려견과 함께 다니는 용감한 소녀, Annalyn이에요. 안타깝게도 가장 친한 친구가 숲에서 열매를 찾던 중 납치되는 재앙이 닥쳐요. Annalyn은 이 퀘스트에서 원한다면 반려견을 데리고 가면서, 가장 친한 친구를 찾아 구출하려고 해요.

친구의 흔적을 한참 따라간 끝에, Annalyn은 친구가 갇혀 있는 야영지를 발견해요. 납치범은 둘이었어요. 강력한 기사와 교활한 궁수죠.

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

  • 빠른 공격: 기사가 잠들어 있으면 빠른 공격을 할 수 있어요. 갑옷을 입는 데 시간이 걸려서 기사는 무방비 상태가 되거든요.
  • 은밀 공격: Annalyn이 들키지 않고 잠든 기사에게 다가가면 은밀 공격으로 12의 피해를 줘요. 그렇지 않으면 기사에게 7의 피해만 줘요.
  • 감시: 무리 중 적어도 한 명이 깨어 있으면 감시할 수 있어요. 그렇지 않으면 감시는 시간 낭비예요.
  • 죄수에게 신호 보내기: 죄수가 깨어 있고 궁수가 잠들어 있으면 새소리로 죄수에게 신호를 보낼 수 있어요. 궁수는 새소리 신호를 훈련받았기 때문에 메시지를 가로챌 수도 있거든요.
  • 죄수 구출하기: Annalyn은 야영지에 몰래 들어가 죄수를 구출하려고 시도할 수 있어요. 이것은 위험한 일이라 다음 두 가지 방법 중 하나로만 성공할 수 있어요:
    • Annalyn이 반려견과 함께 있다면 궁수가 잠들어 있을 때 죄수를 구출할 수 있어요. 기사는 개를 무서워하고, 궁수는 Annalyn과 죄수가 도망치기 전에 준비할 시간이 없을 거예요.
    • Annalyn이 개를 데리고 있지 않다면 Annalyn과 죄수는 아주 은밀하게 움직여야 해요! 죄수가 깨어 있고 기사와 궁수가 모두 잠들어 있으면 Annalyn은 죄수를 구출할 수 있어요. 하지만 죄수가 잠들어 있으면 구출할 수 없어요. 죄수는 Annalyn이 갑자기 나타난 것에 놀라서 기사와 궁수를 깨울 테니까요.

여기에는 다섯 가지 과제가 있어요. 숲에서 만난 세 인물의 상태와 Annalyn의 반려견이 함께 있는지 여부에 따라 위 행동들을 할 수 있는지 판단하는 로직을 구현하는 거예요.

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

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

knightIsAwake = True

canFastAttack knightIsAwake
    --> False

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

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

knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False

canSpy knightIsAwake archerIsAwake prisonerIsAwake
    --> True

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

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

archerIsAwake = False
prisonerIsAwake = True

canSignalPrisoner archerIsAwake prisonerIsAwake
    --> True

4. 죄수를 구출할 수 있는지 확인하기

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

knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False
petDogIsPresent = False

canFreePrisoner knightIsAwake archerIsAwake prisonerIsAwake petDogIsPresent
    --> False

5. 은밀 공격이 줄 수 있는 피해 계산하기

Annalyn이 발각되었는지를 나타내는 불리언 값을 받는 stealthAttackDamage 함수를 구현해요. 이 함수는 발각되었으면 7을, 그렇지 않으면 12를 반환해요.

annalynIsDetected = True

stealthAttackDamage annalynIsDetected
    --> 7
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Elm Exercism

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

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