본문 바로가기

Language/Python

[Python][백준 25239][문자열, 구현] 가희와 카오스 파풀라투스- 컴도리돌이

728x90
 

25239번: 가희와 카오스 파풀라투스

차원의 균열 패턴이 끝난 후, 파풀라투스가 회복하는 체력이 h%라고 할 때, h를 출력해 주세요.

www.acmicpc.net


풀이 과정

1. 현재 시간을 hh, mm으로 받고 정수형으로 저장하였다.

2. 영역의 값을 num 배열에 받고, 영역에 접근하였는지 안 했는지 확인하기 위하여 크기가 6인 bool 형식의 배열을 "seal"로 초기화해주었다.

3. 이벤트 수(L) 만큼 반복문을 돌린다.

    3-1. 만약 입력받은 s.T 가 1분이 지났다면 반복문을 종료시켰다.

    3-2. 입력받은 명령어가 "^" 이면 현재 시간이 가리키는 영역을 False로 변경해준다.

    3-3. 입력받은 명령어가 시간이 포함될 경우

          3-3-1. 명령어에 "MIN" 이 포함될 경우 : 현재 분(mm)과 입력받은 분 값의 합이 60보다 작으면 현재 분에 입력받은 분 값을 더해준다. 만약 60보다 크다면 현재 시간(hh)을 1 증가시키고 12로 나눈 나머지 값을 저장시키고, 현재 분(mm) 값도 입력받은 분 값을 더해서 60으로 나눈 나머지 값을 저장시킨다.

         3-3-2. 명령어에 "HOUT"이 포함될 경우 : 현재 시간(hh)에 단순히 입력받은 시간을 더해서 12로 나눈 나머지 값을 저장시켰다.

4. 만약 영역이 True인 인덱스의 num 값을 더해준다. 

5. ans을 출력한다. 만약 100보다 크면 100을 출력한다.


풀이 코드

hh,mm = input().split(':') ; hh,mm = int(hh),int(mm)
num,seal = list(map(int,input().split())),[True for _ in range(6)]
for _ in range(int(input())) :
  s,op = input().split()
  if float(s) >= 60 : break
  if op == "^" : seal[hh//2] = False
  else :
    if "MIN" in op :
      op = int(op.replace("MIN",""))
      if op + mm < 60 : mm += op
      else : hh ,mm = (hh +1) % 12, (mm+op) % 60
    else : hh =  (hh + int(op.replace("HOUR",""))) % 12
  if True not in seal :
    break
ans = sum(num[i] for i in range(6) if seal[i])
print(ans if ans <= 100 else 100)