본문 바로가기

cospro2급/cospro_2차

2021-05-10

cospro 2급 5번 문제

몬스터 공격하기

 

문제설명

게임 캐릭터가 몬스터와 1:1 전투를 하려한다.

몬스터는 처음에 일정 수치의 체력을 가지고 있다.

캐릭터가 전투에 이기기 위해서는 몬스터를 공격해 체력을 0 이하로 만들어야 한다.

캐릭터는 공격만 사용하며 항상 같은 데미지를 입힌다.

몬스터는 힐링만 사용하며 항상 같은 수치로 체력을 회복한다.

둘은 번갈아가며 마법을 사용하고, 처음에는 항상 캐릭터가 먼저 공격을 시작한다.

 

캐릭턱의 공격력 attack과 몬스터가 자신의 차례에 회복하는 체력 recovery, 몬스터의 초기 체력 hp가 매개변수로 주어질 때, 몬스터를 잡기 위해서 최소 몇 번 공격해야 하는지 return하는 solution 함수를 완성한다.

 

매개변수 설명

캐릭턱의 공격력 attack과 몬스터가 자신의 차례에 회복하는 체력 recovery, 몬스터의 초기 체력 hp가 매개변수로 주어진다.

  attack은 1 이상 100 이하의 자연수이다.

  recovery는 1 이상 100 이하의 자연수이다.

  캐릭터의 공격력은 항상 몬스터의 회복력보다 크다. (recovery < attack)

  hp는 200 이상 1000 이하의 자연수이다.

 

return 값 설명

몬스터를 잡기 위해서 최소 몇 번 공격해야 하는지 return한다.

 

예시

예시설명

몬스터의 체력변화는 아래와 같다.

따라서 최소 3번 공격해야 몬스터를 잡을 수 있다.

 

코드설명

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int attack, int recovery, int hp) {
    int count = 0;	//공격 횟수
    while(true){ 		//무한루프(단, 내부에 무한루프를 빠져나오는 조건식이 있어야 함.)
        count += 1; 	//시작하자마자 1턴을 증가
        hp -= 30; 	//캐릭터가 먼저 공격하기 때문에 30감소
        if(hp <= 0) 	//몬스터가 죽으면 끝
            break;
        hp += 10; 	//몬스터가 자신의 턴에 체력을 회복함.
    }
    return count;
}

int main() {
    int attack = 30;
    int recovery = 10;
    int hp = 60;
    int ret = solution(attack, recovery, hp);

    printf("solution 함수의 반환 값은 %d 입니다.\n", ret);
}

 

while문을 무한으로 돌리고 싶은 경우조건식에 true를 써준다. 그러나 무한으로 돌아가는 반복문은 프로그램이 아니기 때문에 반드시 while문을 빠져나오는 식이 있어야 한다.

캐릭터는 몬스터보다 반드시 먼저 공격하기 때문에 먼저 -30을 해준다. 이후 몬스터가 죽게 되면(hp가 0보다 작으면) 더이상 회복도 못하기 때문에 while문을 빠져나온다. 

캐릭터가 공격하고 몬스터가 회복하는 것이 한턴이다. 캐릭터가 먼저 공격하기 때문에 그것보다 위에 공격횟수를 카운트 해준다.

 

 

 

goorm

구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다.

www.goorm.io

 

'cospro2급 > cospro_2차' 카테고리의 다른 글

2021-05-11  (0) 2021.05.11
2021-05-11  (0) 2021.05.11
2021-05-10  (0) 2021.05.10
2021-05-09  (0) 2021.05.09
2021-05-08  (0) 2021.05.08