본문 바로가기
알고리즘/문제

[NYPC] [2019 예선] 1. 최대 HP

by 코드 이야기 2020. 8. 30.
728x90

 문제  

당신은 게임 "마비노기 영웅전"의 전투 로그 분석을 맡게 되었다. 이번에 분석할 전투는 마법 전문가인 이비의 전투이다.

이비는 몬스터와 전투를 했고, 이 때 전투 과정에서 발생하는 게임 로그인 전투 로그는 시작 체력과 여러 개의 턴으로 이루어져 있다. 그리고 각 턴 마다 다음의 로그가 한 줄에 하나씩 기록되어있다.

  • 이비가 데미지를 받는다. 이 턴 이후에 체력이 h 만큼 줄어든다. 단, 데미지를 받아서 체력이 0 이하가 되는 경우는 없었다. 이 로그는 1 h 형태로 기록된다.
  • 이비가 "회복" 스킬을 사용한다. 이 턴 이후에 체력이 h만큼 회복된다. 단, 회복을 해서 최대 체력을 넘어가는 경우는 없었다. 이 로그는 2 h 형태로 기록된다.
  • 이비가 "최대 생명력" 스킬을 사용한다. 이 턴 이후에 체력이 h만큼 회복되어 최대 체력이 된다. 이 로그는 3 h 형태로 기록된다.

이비의 최대 체력은 처음부터 정해져 있으며 변하지 않았다. 이 로그들을 분석하여 이비의 최대 체력이 얼마인지 알아보자.

 

 입력 형식  

첫째 줄에 시작 체력 H와 진행한 턴 수 T가 공백으로 구분되어 주어진다. (1 ≤ H ≤ 100; 3 ≤ T ≤ 100)

다음 T개의 줄에는 로그의 종류를 뜻하는 a, 데미지의 양 혹은 회복된 양을 뜻하는 h가 공백으로 구분되어 주어진다. 로그에 대한 설명은 본문과 같다. (1 ≤ a ≤ 3; 1 ≤ h ≤ 100)

입력으로 주어지는 모든 수는 자연수이고, 모든 로그는 올바르다는 것이 보장되며, 각 종류의 로그가 최소 한 개 이상 들어온다는 것이 보장된다.

 

 출력 형식  

분석한 이비의 최대 체력을 첫째 줄에 출력한다.

 

 

 입력 예제  

10 3
2 20
1 10
3 40

 출력 예제  

60

 

 채점 방식  

입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞추어야 그 종류에 배정된 점수를 받을 수 있다.

  • 종류 1 (43점): 가장 처음 들어오는 로그는 "최대 생명력" 스킬 이다.
  • 종류 2 (57점): 별다른 제약조건 없음.

 

 

 

 

 

 

 

 해설  

체력을 전체 회복하는 스킬을 사용할 때의 체력이 곧 최대 체력이다. 현재 체력을 계속 갱신해 나가면서, 체력을 전체 회복하는 스킬을 사용한 후의 체력을 출력하면 된다.

 

 

 

 

  나의 풀이  

1. 입력 형식을 보면 "각 종류의 로그가 최소 한 개 이상 들어온다는 것이 보장된다."라는 말이 있다.

   이 말은 곧 최대체력이 되는 경우(a==3)가 꼭 있다는 말이다. 그렇다면 이 경우에 최대체력 값을 알 수 있는 것이다.

 

2. 입력을 받을 때마다 H에 값을 갱신하고, 최대체력이 됐을 때 최대체력을 출력한다.

 

 

- 소스코드

#include <iostream>
using namespace  std;

int main() {
  int H, T, a, h, Max;
  
  cin>>H>>T;

  while(T--) {
    cin>>a>>h;

    if(a==1) 
      H-=h;
    
    else if(a==2) 
      H+=h;
    
    else if(a==3) {
      H+=h;
      Max=H;
    }
  }

  cout<<Max;
}

 

 

 

 

 

 

728x90

댓글