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

애널린의 잠입

학습 연습 문제

소개

불리언

Java에서 불리언은 boolean 타입으로 표현되며, 값은 true 또는 false예요.

Java는 세 가지 불리언 연산자를 지원해요:

  • ! (NOT): 불리언을 부정해요
  • && (AND): 불리언 두 개를 받아서 둘 다 true면 true를 반환해요
  • || (OR): 두 불리언 중 하나라도 true면 true를 반환해요

예시

!true // => false
!false // => true
true && false // => false
true && true // => true
false || false // => false
false || true // => true

지침

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

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

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

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

여기에는 네 가지 과제가 있어요. 숲에 있는 세 인물의 상태와 Annalyn의 반려견이 함께 있는지를 바탕으로, 위 행동들을 할 수 있는지 판단하는 로직을 구현하는 거예요.

1. 빠른 공격이 가능한지 확인하기

기사가 깨어 있는지를 나타내는 불리언 값을 받는 (static) AnnalynsInfiltration.canFastAttack() 메서드를 구현해요. 이 메서드는 기사의 상태를 기준으로 빠른 공격이 가능하면 true를 반환해요. 그렇지 않으면 false를 반환해요:

boolean knightIsAwake = true;
AnnalynsInfiltration.canFastAttack(knightIsAwake);
// => false

2. 일행을 첩보할 수 있는지 확인하기

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

boolean knightIsAwake = false;
boolean archerIsAwake = true;
boolean prisonerIsAwake = false;
AnnalynsInfiltration.canSpy(knightIsAwake, archerIsAwake, prisonerIsAwake);
// => true

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

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

boolean archerIsAwake = false;
boolean prisonerIsAwake = true;
AnnalynsInfiltration.canSignalPrisoner(archerIsAwake, prisonerIsAwake);
// => true

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

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

boolean knightIsAwake = false;
boolean archerIsAwake = true;
boolean prisonerIsAwake = false;
boolean petDogIsPresent = false;
AnnalynsInfiltration.canFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent);
// => false
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Java Exercism

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

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