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

애널린의 잠입

학습 연습 문제

소개

Cairo에서 불리언은 미리 선언된 불리언 타입 bool로 표현되며, 값은 true 또는 false 중 하나예요.

let speeding = true;   // Boolean variable 'speeding' set to 'true'
let has_error = false; // Boolean variable 'has_error' set to 'false' 

Cairo는 식을 불리언 값으로 평가해 true 또는 false를 반환하는 세 가지 논리 연산자를 지원해요.

연산자 의미
&& (and) 두 명제가 모두 참이면 참이에요.
|| (or) 두 명제 중 적어도 하나가 참이면 참이에요.
! (not) 명제가 거짓일 때만 참이에요.

지침

이번 연습 문제에서는 친구가 개발 중인 새로운 RPG 게임의 퀘스트 로직을 구현해요. 게임의 주인공은 Annalyn으로, 용감한 소녀예요. 그리고 사납고 충직한 반려견도 키우고 있죠. 안타깝게도, 가장 친한 친구가 숲에서 열매를 찾던 중 납치를 당하는 일이 벌어져요. Annalyn은 이 퀘스트에서 선택적으로 반려견과 함께 친구를 찾아 구출하려고 해요.

가장 친한 친구의 흔적을 한참 따라간 끝에, 친구가 갇혀 있는 캠프를 발견해요. 알고 보니 납치범은 둘이에요. 힘센 기사와 교활한 궁수죠.

납치범들을 발견한 Annalyn은 다음 중 어떤 행동을 할 수 있을지 생각해요:

  • 빠른 공격: 기사가 잠들어 있을 때 빠른 공격을 할 수 있어요. 갑옷을 입는 데 시간이 걸려서 기사가 취약해지기 때문이에요.
  • 감시: 납치범들 중 적어도 한 명이 깨어 있으면 감시할 수 있어요. 그렇지 않으면 감시는 시간 낭비예요.
  • 포로에게 신호 보내기: 포로가 깨어 있고 궁수가 잠들어 있을 때 새소리를 이용해 포로에게 신호를 보낼 수 있어요. 궁수는 새소리 신호를 훈련받아서 메시지를 가로챌 수 있기 때문이에요.
  • 포로 구출하기: Annalyn은 캠프에 몰래 들어가 포로를 구출하려고 시도할 수 있어요. 이것은 위험한 행동이고, 두 가지 방법 중 하나로만 성공할 수 있어요:
    • Annalyn이 반려견과 함께 있다면 궁수가 잠들어 있을 때 포로를 구출할 수 있어요. 기사는 개를 무서워하고, 궁수는 Annalyn과 포로가 도망치기 전에 준비할 시간이 없어요.
    • Annalyn이 반려견과 함께 있지 않다면 Annalyn과 포로는 아주 은밀하게 움직여야 해요! 포로가 깨어 있고 기사와 궁수가 둘 다 잠들어 있으면 Annalyn은 포로를 구출할 수 있어요. 하지만 포로가 잠들어 있으면 구출할 수 없어요. Annalyn이 갑자기 나타나면 포로가 놀라서 기사와 궁수를 깨울 테니까요.

해야 할 일은 네 가지예요: 숲에서 발견한 세 캐릭터의 상태와 Annalyn의 반려견 동반 여부에 따라 위 행동들이 가능한지 판단하는 로직을 구현하는 거예요.

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

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

let knight_awake = true;
can_fast_attack(knight_awake); // false

2. 납치범들을 감시할 수 있는지 확인하기

기사, 궁수, 포로가 각각 깨어 있는지를 나타내는 불리언 값 세 개를 받는 can_spy() 함수를 정의해요. 이 함수는 세 캐릭터의 상태에 따라 납치범들을 감시할 수 있으면 true를 반환해요. 그렇지 않으면 false를 반환해요:

let knight_awake = false;
let archer_awake = true;
let prisoner_awake = false;
can_spy(knight_awake, archer_awake, prisoner_awake); // true

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

궁수와 포로가 각각 깨어 있는지를 나타내는 불리언 값 두 개를 받는 can_signal_prisoner() 함수를 정의해요. 이 함수는 두 캐릭터의 상태에 따라 포로에게 신호를 보낼 수 있으면 true를 반환해요. 그렇지 않으면 false를 반환해요:

let archer_awake = false;
let prisoner_awake = true;
can_signal_prisoner(archer_awake, prisoner_awake); // true

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

불리언 값 네 개를 받는 can_free_prisoner() 함수를 정의해요. 처음 세 매개변수는 기사, 궁수, 포로가 각각 깨어 있는지를 나타내요. 마지막 매개변수는 Annalyn의 반려견이 함께 있는지를 나타내요. 이 함수는 세 캐릭터의 상태와 Annalyn의 반려견 동반 여부에 따라 포로를 구출할 수 있으면 true를 반환해요. 그렇지 않으면 false를 반환해요:

let knight_awake = false;
let archer_awake = true;
let prisoner_awake = false;
let dog_present = false;
can_free_prisoner(knight_awake, archer_awake, prisoner_awake, dog_present); // false
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Cairo Exercism

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

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