Iteration(규칙이 있는) 반복의 마지막 문제를 풀어보자.
도전 과제: 내가 사용하는 휴대전화 데이터 요금제는 매달 x MB 만큼 데이터를 제공한다. 사용하지 않은 데이터는 다음 달로 이월된다. 그렇다면 내가 n개월동안 사용한 후 그 다음 달 사용 가능한 데이터량을 계산한다.
입력:
1. 매월 주어지는 데이터량 x(정수이고 1 <= x <= 100)
2. 사용한 개월 수 n(정수이고 1 <= n <= 100)
3. 매달 사용한 데이터량을 한 줄씩 입력(총 n개의 줄이고, 각 숫자는 사용 가능한 양을 초과하지 않음)
여기에서 입력되는 3번째 값은 정확하지 않고 2번째 줄에 의해 바뀌기 때문에 입력 자체를 루프를 활용합니다. 즉,
for i in range(n): #해당되는 월을 처리하라는 의미
덧, 이 문제를 해결하는 방법에서 선생님과는 그저 취미용이 아닌 실무에서 사용 가능한 코드로 작성해 보았기 때문에 책의 풀이와 다름
우선, 명확하게 의미를 파악할 수 있도록 데이터량을 x라고 하지 않고 변수명을 사용했다. (코드만 보고도 어떤 문제를 해결하기 위한 코드인지 파악할 수 있는 것이 좋은 코드라고 하셨다.)
1. 매달 주어지는 데이터량monthly_given_data 입력한다.
2. 사용한 달(n) 수를 입력한다.
3.
4. 사용가능한 양capacity은 첫 달에는 매달 주어지는 데이터 량monthly_given_data과 같다. (여기에서 0에서 시작하지 않는 점을 유의하라)
5.
6. 만약 입력된 데어터량monthly_given_data이 1보다 작거나 monthly_given_data가 100보다 크면
7. 이 문제는 해결할 수 없으니 나간다.
8. n달의 범위 내에서 처리하는 데,
9. 사용량usage은 정수로 입력되고
10. 만약 사용량usage이 사용가능 양capacity보다 크면
11. 이 문제는 해결할 수 없으니 나간다.
12. 그렇지 않고 사용량usage이 사용가능 양capacity보다 작거나 같으면
13. 사용가능 양capacity은 사용가능 양에서 사용량usage을 빼고 매달 주어지는 데이터량monthly_given_data을 더한 것이다.
14. 사용가능 양capacity에 매달 주어지는 데이터량monthly_given_data을 더한 값(= n개월만큼 사용한 다음 달에 사용가능한 양)을 출력하라.
위에 코드는 주어진 도전 과제와 입력에 적합한 코드이며 우리가 구하려는 값, 즉 사용 가능한 데이터 양을 구하는 데 적합한 코드이다.
반면, 책에서 원한 코드는 다음과 같다.
덧, 코드의 변수명은 내가 정한 것이다. 책에는 monthly_given_data는 monthly_mb라고 되어 있고, capacity는 excess라고 되어 있으며 usage는 used로 표기되어 있다.
틀린 것은 아니지만, 정수 x의 범위나 정수 n의 범위는 고려하지 않은 코드이기 때문에 취미용이 아닌 실무에서는 사용하면 안된다. 유지보수도 너무 힘들기도 하고...
지금까지 Iteration 반복문인 for 루프에 대해 공부했다. 요약해 보자면, 표준 for 루프는 연속된 문자들을 반복하고, 범위 기반 for 루프는 일정 범위 내 정수들을 반복한다. 반복문 복습한 첫 시간에 이야기 했듯이 for 루프는 규칙이 있는 정해진 횟수만큼 반복해야 할 때 유용하다.
'Python 배우기' 카테고리의 다른 글
[외계어 배우기] 반복문: 무한 반복(문제#8 Slot Machine) (0) | 2024.03.07 |
---|---|
[외계어 배우기] 반복문: 무한 루프(문제#8 Slot Machines) (0) | 2024.03.04 |
[외계어 배우기] 반복문(문제#6 Occupied Spaces) (0) | 2024.02.26 |
[외계어 배우기] 연습문제 (1) | 2024.02.24 |
[외계어 배우기] 문제#5 Three Cups (0) | 2024.02.22 |