일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 파이썬
- 설명
- Baekjoon
- 문제풀이
- 10926
- 구현
- 초보
- C Programming
- HTML
- 코드엔진
- 문자열
- C 언어
- 친절한 설명
- 백준
- implement
- CSS
- 꾸준히
- 10807
- 알고리즘
- greedy
- C
- VS
- 그리디
- c언어
- 심화1
- 입문
- Beakjoon
- Python
- Implemention
- 정리
- Today
- Total
안경잡이 구루루
백준 22864 (피로도) [Python/파이썬] [Greedy/그리디] 본문
백준 22864 (피로도) [Python/파이썬] [Greedy/그리디]
구루루(gururu) 2023. 10. 8. 17:45https://www.acmicpc.net/problem/22864
나:
a,b,c,m = map(int,input().split())
stress = 0
work = 0
hours=24
while hours !=0:
if a > m:
break
elif stress+a > m:
stress -=c
hours -=1
if stress <0:
stress=0
else:
stress +=a
work +=b
hours -=1
print(work)
완성된 코드는 위와 같다.
(1)
a,b,c,m = map(int,input().split())
stress = 0
work = 0
hours=24
a, b, c, m 을 사칙연산에 이용하기 위해 빈칸을 기준으로 모두 정수값으로 입력받는다.
피로도는 stress, 최대 일은 work, 하루 24시간은 hours 변수에 담아 기본적인 설정했다.
(2)
while hours !=0:
if a > m:
break
elif stress+a > m:
stress -=c
hours -=1
if stress <0:
stress=0
else:
stress +=a
work +=b
hours -=1
print(work)
설명에 앞서서 잠시 내가 문제 풀때 막혔던 부분에 대해 얘기하자면
"피로도 M을 넘지 않는 않게 일을 한다" 것의 정확한 의미였다. M만 안넘게 일과 휴식을 '같이'하면 되겠다 싶어서 첨에 코드를 짤 떄는 일과 휴식에 의한 피로도 값 a-c를 한번에 계산후 hours -2 를 했는데 이 때문에 자꾸 예제3의 경우를 이해 못하고 해맸던 바보짓을 했다. 일과 휴식을 동시에 할 수 없다라고 생각하면 바로 알아차렸을 텐데...
아무튼 이제 위 (2) 코드에 대해 설명하자면
최대한 많은 일을 하기 위해서 1. 하루 24시간을 다 사용, 2. stress >m 인 상황을 만들지 않기 를 반드시 고려해야한다.
그래서 반복문 while 을 이용해 하루 24시간을 다 사용해 0 이 될 때까지 반복했다.
이때 일을 한 후 받는 피로도 a 가 번아웃 기준인 m보다 큰 경우 예제 3처럼 반복문을 종료시켜 0을 출력시킨다.
크지 않은 경우엔 일을 한 후 받는 피로도 a와 현재 피로도인 stress의 합이 m 을 넘지 않게 elif 구문을 이용해 한 시간당 c 를 빼준다. 이는 a 를 stress에 더했을 때 m 을 넘지 않을 정도로만 c 를 빼기에 최소한의 시간을 이용해 휴식을 하고 최대한 많은 일을 할 수 있게 된다.
이때 일을 통해 얻는 피로도 a 보다 휴식을 통해 뺴는 피로도 c가 더 큰 경우가 있을 수 있다. 그래서 문제에 나온 것처럼 피로도가 음수로 내려가면 0 으로 바꿔주는 코드를 현재 피로도에서 c 를 뺄때 if 를 통해 구현한다.
이외에 경우에는 else 구문을 통해 일한 시간과 피로도를 누적해서 더해준다.
최종적으로 최대한 많은 일을 한 시간이 work 에 담기고 이를 print해서 출력한다.
'파이썬(Python) > 문제풀이(백준,BaekJoon)' 카테고리의 다른 글
백준 28014 (첨탑 밀어서 부수기) [Python/파이썬] [Greedy/그리디] (2) | 2023.10.09 |
---|---|
백준 14487 (욱제는 효도쟁이야!!) [Python/파이썬] [Greedy/그리디] (0) | 2023.10.09 |
백준 14659 (한조서열정리하고옴ㅋㅋ) [Python/파이썬] [Greedy/그리디] +) Pypy3 (0) | 2023.09.18 |
백준 14720 (우유축제) [Python/파이썬] [Greedy/그리디] (0) | 2023.09.18 |
백준 2864 (5와 6의 차이) [Python/파이썬] [Greedy/그리디] (0) | 2023.09.17 |