본문 바로가기

교육/[Codeit] 프로그래밍 기초 in Python

실습문제 약수찾기, 이자 구하기

반응형

정수 n의 약수는 n을 나누었을 때 나누어 떨어지는 수입니다. 만약 정수 i가 정수 n의 약수라면, n을 i로 나누었을 때 나머지가 0이 나와야 하는 거죠.

정수 120의 약수를 모두 출력하고, 총 몇개의 약수가 있는지 출력하는 프로그램을 써 보세요. 아래처럼 콘솔에 출력되어야 합니다.

1
2
3
4
5
6
8
10
12
15
20
24
30
40
60
120
120의 약수는 총 16개입니다.



i = 1
count = 0

while i <= 120:
    if 120 % i == 0:
        print(i)
        count += 1
    i += 1
    
print("{}의 약수는 총 {}개입니다.".format(120, count))

 

 

 

 

 

 

1988년 쌍문동에 사는 택이는 바둑 대회 우승 상금으로 5,000만원을 받았습니다. 하지만 바둑 외에는 아는 게 없으니, 이웃 어른들에게 이 돈으로 무엇을 해야 할지 물어보기로 하였습니다.

은행에서 근무하는 동일 아저씨는 은행에 돈을 맡겨서 매년 이자로 12%씩 받는 것을 추천하셨습니다. 1년 후인 1989년에는 5,000만원의 12% 이자인 600만원이 더해져 5,600만원이 된다고 하면서요.

이 이야기를 들은 미란 아주머니는 고작 12% 때문에 생돈을 은행에 넣느냐며, 얼마 전 지어진 은마아파트를 사라고 추천하셨습니다. 당시 은마아파트의 매매가는 5,000만원이었죠.

2016년 기준 은마아파트의 매매가는 11억원인데요. 1988년 은행에 5,000만원을 넣었을 경우 2016년에는 얼마가 있을지 계산하여, 동일 아저씨와 미란 아주머니 중 누구의 말을 듣는 것이 좋았을지 판단해 보세요. 2016년 은행에 얼마가 있을지는 꼭 while문을 사용해서 계산해 주세요!

2016년에 은행에 저축해 둔 금액이 더 크면, *원 차이로 동일 아저씨 말씀이 맞습니다.가 출력되도록 하세요. 반대로 은마아파트의 가격이 더 크면, *원 차이로 미란 아주머니 말씀이 맞습니다.가 출력되도록 하세요. 여기서는 꼭 if문을 사용해 주세요!


원하는 출력 결과


94193324원 차이로 동일 아저씨 말씀이 맞습니다.

 

 

 

상수, 변수 정의
먼저 이 프로그램에서 사용될 상수와 변수를 모두 정의해 봅시다. 사용될 값들을 미리 적어 두면 틀이 잡힌 상태에서 고민을 시작할 수 있습니다.

상수(바뀌지 않을 값)와 변수(바뀔 값)를 나눠서 생각해 봅시다.

상수
먼저 상수는 어떤 것들이 있을까요?

이자율 (INTEREST_RATE) → 12%로 고정
2016년 은마아파트 가격 (APARTMENT_PRICE_2016) → 11억원으로 고정
    # 상수 정의
INTEREST_RATE = 0.12
APARTMENT_PRICE_2016 = 1100000000
상수 이름은 모두 대문자로 쓴다는 점 기억해 두세요!

변수
이제 변수도 생각해 볼게요.

우선 반복문을 돌기 위해 사용되는 변수를 생각해 봅시다. 우리는 1988년부터 시작해서 2016년까지 반복을 하고 싶은 거죠? 그러면 연도를 나타내는 변수가 필요하겠네요. year라고 이름을 짓겠습니다.

또 어떤 변수가 필요할까요? 처음에는 은행에 5,000만원을 넣었지만, 매년 그 금액이 바뀔 텐데요. 이건 bank_balance라는 변수에 저장하겠습니다.

정리하자면 이렇습니다.

연도 (year) → 1988부터 2016까지 바뀜
은행 잔액 (bank_balance) → 50000000으로 시작해서 매년 쌓임
# 변수 정의
year = 1988
bank_balance = 50000000
while 반복문
반복문을 이용해서 1988년부터 2016년까지 돈이 얼마나 쌓이는지 계산해야 합니다. 어떻게 할 수 있을까요?

while 반복문의 수행 부분에 들어갈 때마다 bank_balance가 12%씩 늘어나도록 하면 되겠죠? 코드로 표현하면 이렇습니다.

bank_balance = bank_balance * (1 + INTEREST_RATE)
그런데 수행 부분에 몇 번이나 들어가야 할까요?

1988년에서 1989년으로 넘어갈 때 이자가 쌓여야겠죠? 마찬가지로 1989년에서 1990년으로 넘어갈 때도 이자가 쌓여야 합니다. 이런 식으로 2015년에서 2016년으로 넘어갈 때까지 수행 부분으로 들어가서 이자가 쌓여야 하는 거죠. 그러면 반복문을 이렇게 쓸 수 있습니다.

while year < 2016:
    bank_balance = bank_balance * (1 + INTEREST_RATE)
    year += 1
if, else문
마지막으로 결과를 출력하기만 하면 되는데요. 은행 잔액이 더 큰지 아파트 가격이 더 큰지에 따라서 출력 결과를 정해 주면 됩니다.

if bank_balance > APARTMENT_PRICE_2016:
    print("{}원 차이로 동일 아저씨 말씀이 맞습니다.".format(int(bank_balance - APARTMENT_PRICE_2016)))
else:
    print("{}원 차이로 미란 아주머니 말씀이 맞습니다.".format(int(APARTMENT_PRICE_2016 - bank_balance)))
모범 답안
# 상수 정의
INTEREST_RATE = 0.12
APARTMENT_PRICE_2016 = 1100000000

# 변수 정의
year = 1988
bank_balance = 50000000

while year < 2016:
    bank_balance = bank_balance * (1 + INTEREST_RATE)
    year += 1

if bank_balance > APARTMENT_PRICE_2016:
    print("{}원 차이로 동일 아저씨 말씀이 맞습니다.".format(int(bank_balance - APARTMENT_PRICE_2016)))
else:
    print("{}원 차이로 미란 아주머니 말씀이 맞습니다.".format(int(APARTMENT_PRICE_2016 - bank_balance)))
94193324원 차이로 동일 아저씨 말씀이 맞습니다.

728x90
반응형