추가요금계산(범위계산)

gyeorrr·2023년 1월 14일
0

이번글은, 수학의 기본개념과 계산식을 얼마나 깔끔하게 쓰냐에 따라서 풀이가 엄청 달라지는, 문제였다
이걸 배우면서 수학적인 방법으로 다가가고, 아는것도 중요하지만, 코드자체를 효율적으로 쓰는 방법을 우선적으로 생각해야한다는 걸 와닿게 해주는 문제였다.

문제

이용시간에 따른 요금을 계산합니다 구간을 나누어서, 구간마다 500원이 추가로 부과됩니다 기본 이용요금은 3000원이고, 구간당 500원의 추가요금이 발생합니다

   시간        요금
   0 ~ 30      3,000 발생 x
   31 ~ 40     3,500 발생
   41 ~ 50     4,000
   .
   .
   .

내가 푼 건 수학연산으로 만들어서 풀었다
우선으로 본 것
30분이후 부터는 10분당 500원 추가
값이 정해져있는 게 아니라 계속 늘어날 수 있기 때문에 어떻게 500원을 쉽게 곱할 수 있을까
라는 관점을 가지고 봤다
그래서 내가 푼 건

a = int(input('이용시간 :'))

time = 500* (a // 10 -2)
total = time + 3000
if a <= 30:
    print('3000원')
elif a > 30:
    print (f'{total:,d}원')

이렇게 썼을 때의 문제점

31분 부터 40분 까지 500원이고 41분부터 50분 까지 1,000원인데 내가 쓴 방법대로하면
각 10분 때 마다 500원이 더 추가되어서 나온다 왜냐하면, 십의자리 숫자를 중심으로 가격대가 측정이 되어버리기 때문에, 쓸거면 elif값을 수정을 해야할 필요가 있다.
범위가 어떻게 측정되냐에 따라 내답이 맞을수도 틀릴수도있다 주의할 것

★모범답안★ 여기 집중

minute = int (input('이용시간 (분):'))

if minute <= 30:
    fee = 3000
else:
    addtime = minute - 30 		#else 값 안에 변수선언 가능
    if minute % 10 != 0:         #시간이 10으로 나누어 떨어지는가        
        fee = 3000 + 500 * (addtime // 10 + 1)

    else:                       #시간이 10으로 나누어 떨어지지않는가
        fee = 3000 + 500 * (addtime // 10)

print(f'요금: {fee:,d}')

여기서 봐야할 특이사항
일단 if , else ,elif 안에 변수선언이 가능하다는 것(else 와 if 사이에 변수선언 넣었음)
// , % 연산자의 확실한 이해를 해야한다는 것

if minute % 10 != 0:
	fee = 3000 + 500 * (addtime // 10 +1)

minute 가 % 10으로 나누었을 때 나머지가 0으로 떨어지지 않으면

fee = 3000 + 500 * (addtime // 10+ 1)

예를들어 addtime을 11(41분)이라고 가정한다면 11 // 10 = 1 에다가 +1 = 2
다른예로 addtime을 10(40분)이라고 가정하면 10 // 10 = 1 에다가 = 1
어렵게 생각 할 필요가 없었다....
31분,41분,51분 이런식으로 1,2,3 이런식으로 만들어주고 * 500 만 해버리면 되는거다..
이것을 이용해서 뺄셈과 //로 기준값을 1로 만들어주면 된다.
약간 rank.eq 함수 비슷한 느낌

0개의 댓글