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

애널린의 잠입

학습 연습 문제

소개

불리언

C#에서 불리언은 bool 타입으로 나타내며, 값은 true 또는 false예요.

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

지침

이 연습 문제에서는 친구가 개발 중인 새로운 RPG 게임의 퀘스트 로직을 구현해요.

게임의 주인공은 사납고 충직한 반려견과 함께 다니는 용감한 소녀, 애널린이에요. 안타깝게도 가장 친한 친구가 숲에서 열매를 찾던 중 납치당하는 재난이 닥쳐요.

애널린은 가장 친한 친구를 찾아 구출하려고 해요. 원한다면 이 퀘스트에 반려견을 데리고 갈 수도 있어요.

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

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

  • 빠른 공격: 기사가 잠들어 있으면 빠른 공격을 할 수 있어요. 갑옷을 입는 데 시간이 걸려서 기사가 취약해지기 때문이에요.
  • 감시: 일행 중 적어도 한 명이 깨어 있으면 몰래 살펴볼 수 있어요. 그렇지 않으면 감시는 시간 낭비예요.
  • 죄수에게 신호 보내기: 죄수가 깨어 있고 궁수가 잠들어 있으면 새 소리로 죄수에게 신호를 보낼 수 있어요. 궁수는 새 소리 신호를 훈련받아서 메시지를 가로챌 수 있기 때문이에요.
  • 죄수 구출하기: 애널린은 죄수를 구출하기 위해 몰래 야영지에 잠입할 수 있어요. 이는 위험한 일이고, 다음 두 가지 방법 중 하나로만 성공할 수 있어요:
    • 애널린이 반려견과 함께 있다면, 궁수가 잠들어 있을 때 죄수를 구출할 수 있어요. 기사는 개를 무서워하고, 애널린과 죄수가 도망치기 전에 궁수가 준비할 시간이 없기 때문이에요.
    • 애널린이 개와 함께 있지 않다면, 애널린과 죄수는 아주 조심스러워야 해요! 죄수가 깨어 있고 기사와 궁수가 둘 다 잠들어 있으면 애널린은 죄수를 구출할 수 있어요. 하지만 죄수가 잠들어 있으면 구출할 수 없어요. 죄수가 애널린의 갑작스러운 등장에 놀라서 기사와 궁수를 깨울 테니까요.

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

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

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

var knightIsAwake = true;
QuestLogic.CanFastAttack(knightIsAwake);
// => false

2. 일행을 감시할 수 있는지 확인하기

기사, 궁수, 죄수가 각각 깨어 있는지를 나타내는 세 개의 불리언 값을 받는 (static) QuestLogic.CanSpy() 메서드를 구현해요. 이 메서드는 세 인물의 상태에 따라 일행을 감시할 수 있으면 true를, 그렇지 않으면 false를 반환해요:

var knightIsAwake = false;
var archerIsAwake = true;
var prisonerIsAwake = false;
QuestLogic.CanSpy(knightIsAwake, archerIsAwake, prisonerIsAwake);
// => true

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

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

var archerIsAwake = false;
var prisonerIsAwake = true;
QuestLogic.CanSignalPrisoner(archerIsAwake, prisonerIsAwake);
// => true

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

네 개의 불리언 값을 받는 (static) QuestLogic.CanFreePrisoner() 메서드를 구현해요. 처음 세 매개변수는 기사, 궁수, 죄수가 각각 깨어 있는지를 나타내요. 마지막 매개변수는 애널린의 반려견이 함께 있는지를 나타내요. 이 메서드는 세 인물의 상태와 애널린의 반려견 동반 여부에 따라 죄수를 구출할 수 있으면 true를, 그렇지 않으면 false를 반환해요:

var knightIsAwake = false;
var archerIsAwake = true;
var prisonerIsAwake = false;
var petDogIsPresent = false;
QuestLogic.CanFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent);
// => false
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
C# Exercism

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

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