파이썬 PCCE 문제 해석 연습|긴 문제를 짧은 코드로 바꾸기
파이썬 초보자에게 PCCE 문제가 어려운 이유는 코드가 길어서가 아니라 긴 문제 설명을 어떤 코드로 바꿔야 하는지 모르기 때문입니다.
이번에는 문제의 내용을 전부 외우지 않고, 문장 하나를 읽고 필요한 파이썬 문법을 떠올리는 연습을 해보겠습니다.
1. 문제부터 짧게 읽어보기
가뭄이 발생한 농지에 저수지의 물을 공급하고 있습니다.
현재 저수지에는 일정량의 물이 있고, 농지에서 필요한 물의 양은 매달 달라집니다.
앞으로 몇 개월 동안 물 사용량이 얼마나 증가하거나 감소할지 변화율이 주어집니다.
이때 저수지의 물보다 농지에서 사용한 물의 총량이 많아지는 시점을 찾아야 합니다.
저수지의 물이 부족해지는 시점
2. 긴 문제를 문장별로 바꿔보기
문제를 읽으면서 다음처럼 생각해 봅니다.
| 문제의 문장 | 떠올릴 코드 |
|---|---|
| 여러 달을 차례대로 확인한다. | for |
| 각 달의 변화율을 확인한다. | change[i] |
| 현재 사용량이 변화한다. | usage |
| 매달 사용량을 계속 더한다. | += |
| 저수지의 양보다 많아졌는지 확인한다. | if |
| 부족해진 시점을 알려준다. | return |
반복 → 변화 → 누적 → 비교 → 반환
3. 실제 계산은 이것만 이해하기
지난달 물 사용량이 700이고 이번 달 변화율이 +15%라고 생각해 보겠습니다.
이번 달 사용량은 다음과 같이 계산합니다.
700 + 700 × 15 / 100 = 805
따라서 이번 달 사용량은 805가 됩니다.
다음 달은 처음의 700이 아니라 805를 기준으로 계산해야 합니다.
700 → 805 → 644 → 708 → 743 → ...
즉, usage는 반복할 때마다 새로운 값으로 바뀝니다.
연상하기|사용량이 변한다면?
현재 사용량에 변화율을 적용합니다.
usage * change[i] / 100
변화량을 기존 사용량에 더합니다.
usage += usage * change[i] / 100
따라서 사용량을 계속 변경하는 코드가 필요합니다.
4. 여러 달을 계산하려면?
한 달만 계산하는 것이 아니라 여러 달을 차례대로 계산해야 합니다.
연상하기|여러 번 반복한다면?
반복문을 떠올립니다.
for i in range(len(change)):
한국어로 읽으면:
5. 매달 사용량을 더하려면?
각 달의 사용량을 합쳐서 지금까지 사용한 물의 총량을 구해야 합니다.
연상하기|계속 더한다면?
먼저 총량을 0으로 시작합니다.
total_usage = 0
그리고 매달 사용량을 더합니다.
total_usage += usage
6. 물이 부족한지 확인하려면?
저수지에 저장된 물보다 농지에서 사용한 물의 총량이 많아지면 물이 부족한 것입니다.
연상하기|비교한다면?
두 값을 비교합니다.
if total_usage > storage:
조건이 참이라면 현재 시점의 번호를 반환합니다.
return i
7. 이제 최종 코드를 확인하기
지금까지 생각한 내용을 하나로 합치면 됩니다.
최종 코드 보기
def solution(storage, usage, change):
total_usage = 0
for i in range(len(change)):
usage += usage * change[i] / 100
total_usage += usage
if total_usage > storage:
return i
return -1
8. 최종 코드를 한 단위씩 한국어로 읽기
코드를 외우려고 하지 말고 한 줄씩 한국어로 번역해 봅니다.
코드 해석 펼쳐보기
def solution(storage, usage, change):
→ 저수지 양, 현재 사용량, 변화율을 받아서 문제를 해결하는 함수
total_usage = 0
→ 지금까지 사용한 물의 총량을 0으로 시작
for i in range(len(change)):
→ 변화율을 처음부터 끝까지 하나씩 확인
usage += usage * change[i] / 100
→ 현재 사용량에 이번 달 변화율을 적용하여 새로운 사용량으로 변경
total_usage += usage
→ 이번 달 사용량을 지금까지의 총 사용량에 더함
if total_usage > storage:
→ 지금까지 사용한 물이 저수지의 저장량보다 많아졌는지 확인
return i
→ 물이 부족해진 현재 시점의 번호를 반환
return -1
→ 모든 기간 동안 물이 부족하지 않았다면 -1을 반환
9. 초보자는 이것만 기억하기
여러 번 한다
→ for
값이 변한다
→ usage
계속 더한다
→ +=
조건을 확인한다
→ if
결과를 돌려준다
→ return
10. 긴 문제를 짧게 만드는 방법
처음 문제에는 가뭄, 농지, 저수지, 물 공급량 등 많은 이야기가 나옵니다.
하지만 코딩할 때는 모든 이야기를 기억할 필요가 없습니다.
가뭄이 발생했다
↓
농지에 물이 필요하다
↓
매달 필요한 물의 양이 달라진다
↓
사용량을 계산한다
↓
사용량을 누적한다
↓
저수지의 양과 비교한다
↓
부족한 시점을 반환한다
이렇게 바꾸면 긴 문제도 몇 개의 코드 작업으로 줄어듭니다.
11. 오늘의 핵심
① 무엇을 반복하지?
② 무엇이 변하지?
③ 무엇을 계속 더하지?
④ 무엇과 비교하지?
⑤ 어떤 결과를 반환하지?
이 다섯 가지 질문에 먼저 답하면 필요한 파이썬 문법을 훨씬 쉽게 떠올릴 수 있습니다.
마무리
이번 문제에서 중요한 것은 가뭄이나 농업 지식이 아닙니다.
긴 문장을 짧은 코드의 구조로 바꾸는 연습입니다.
반복한다
↓
계산한다
↓
누적한다
↓
비교한다
↓
반환한다
앞으로 PCCE 문제를 풀 때도 먼저 문제를 이렇게 줄여보세요.
코드를 외우는 것보다 문장을 보고 어떤 문법이 필요한지 생각하는 능력을 키우는 것이 초보자에게 더 중요한 연습입니다.
※ 이 글은 파이썬 학습을 위해 문제의 핵심적인 사고방식을 바탕으로 새로운 농업·가뭄 상황과 예시 숫자를 구성한 학습 콘텐츠입니다.