Practice 8 : 자료 구조¶
종합소득세 계산하기¶
A라는 나라에서는 종합소득세는 과세표준 금액 구간에 따라 다른 세율이 적용된다.
즉, 1,300만원을 벌었을 경우
1,200*0.06 + 100*0.15
를 계산한 결과가 납부해야 하는 세액이다.납부해야하는 세금의 결과를 반환하는 함수
tax()
를 작성하시오.

과세표준액 |
세율 |
---|---|
1,200이하 |
6% |
1,200 ~ 4,600 |
15% |
4,600 ~ |
35% |
예시)
tax(1200) #=> 72.0
tax(4600) #=> 582.0
tax(5000) #=> 722.0
def tax(won):
if won <= 1200:
return won * 0.06
elif won <= 4600:
return 72 + (won - 1200) * 0.15
else:
return 582 + (won - 4600) * 0.35
# 아래의 코드를 실행하여 출력된 결과를 확인하시오.
print(tax(1200))
print(tax(4600))
print(tax(5000))
72.0
582.0
722.0
카쉐어링 요금 계산하기¶
카쉐어링 서비스는 요금을 다음과 같이 계산한다.
대여는 10분 단위로 가능하다.
대여 요금 : 10분당 1,200원
보험료 : 30분당 525원 (50분을 빌리면, 1시간으로 계산)
주행 요금 : km당 170원 (주행 요금은 100km가 넘어가면, 넘어간 부분에 대하여 할인이 50% 적용)
예) 160km를 달렸으면, 170*100 + 85 *60
양의 정수인 대여시간(분)과 주행거리를 받아 계산 결과를 반환하는 함수
fee()
를 작성하시오.
참고 함수 math.ceil
예시)
fee(600, 50) #=> 91000
fee(600, 110) #=> 100350
import math
def fee(minute, distance):
minute_fee = (minute/10)*1200
if minute == 50:
premium = 1050
else:
premium = (minute/30)*525
if distance > 100:
distance_fee = 170*100 + 85*(distance-100)
else:
distance_fee = 170 * distance
return math.ceil(minute_fee + premium + distance_fee)
# 아래의 코드를 실행하여 출력된 결과를 확인하시오.
print(fee(600, 50))
print(fee(600, 110))
91000
100350
문자열 탐색¶
문자열 요소로만 이루어진 리스트를 넣었을 때, 문자열 길이가 2 이상이고 주어진 문자열의 첫번째와 마지막 문자가 같은 문자열의 수를 카운트하는 함수
start_end()
를 작성하시오.
예시)
start_end(['level', 'asdwe', 's', 'abceda', 'gsdwrtfg']) #=> 3
def start_end(words):
cnt = 0
for word in words:
if len(word) > 1 and word[0] == word[-1]:
cnt += 1
return cnt
# 아래의 코드를 실행하여 출력된 결과를 확인하시오.
print(start_end(['level', 'asdwe', 's', 'abceda', 'gsdwrtfg']))
3
Collatz 추측¶
1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측이다. 그 원리는 아래와 같다.
입력된 수가 짝수라면 2로 나눈다.
입력된 수가 홀수라면 3을 곱하고 1을 더한다.
결과로 나온 수에 같은 작업을 1이 될 때까지 반복한다.
예를 들어, 입력된 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 이 되어 총 8번 만에 1이 된다.
위 작업을 몇 번이나 반복해야하는지 반환하는 함수
collatz()
를 작성하시오 (단, 작업을 500번을 반복해도 1이 되지 않는다면 –1을 반환하시오.)
예시)
collatz(6) #=> 8
collatz(16) #=> 4
collatz(27) #=> 111
collatz(626331) #=> -1
def collatz(num):
cnt = 0
while True:
if not num % 2:
num /= 2
cnt += 1
elif num % 2:
num = num*3 + 1
cnt += 1
if num == 1:
return cnt
if cnt >= 500:
return -1
# 아래의 코드를 실행하여 출력된 결과를 확인하시오.
print(collatz(6))
print(collatz(16))
print(collatz(27))
print(collatz(626331))
8
4
111
-1
딕셔너리 뒤집기¶
딕셔너리는 기본적으로 key와 value로 이뤄져있다.
딕셔너리를 입력받아 value와 key를 뒤집은 결과를 반환하는 함수
dict_invert()
를 작성하시오.
예시)
dict_invert({1: 10, 2: 20, 3: 30}) #=> {10: [1], 20: [2], 30: [3]}
dict_invert({1: 10, 2: 20, 3: 30, 4: 30}) #=> {10: [1], 20: [2], 30: [3, 4]}
dict_invert({1: True, 2: True, 3: True}) #=> {True: [1, 2, 3]}
def dict_invert(my_dict):
new_dict = {}
for k, v in my_dict.items():
if new_dict.get(v):
new_dict[v].append(k)
else:
new_dict[v] = [k]
return new_dict
# 해당 코드를 통해 올바른 결과가 나오는지 확인하시오.
print(dict_invert({1: 10, 2: 20, 3: 30}))
print(dict_invert({1: 10, 2: 20, 3: 30, 4: 30}))
print(dict_invert({1: True, 2: True, 3: True}))
{10: [1], 20: [2], 30: [3]}
{10: [1], 20: [2], 30: [3, 4]}
{True: [1, 2, 3]}