print("1번 답안")
tmp = []
print(tmp)
자세한 설명은 생략한다
def get_data_type(val):
# 데이터형을 문자열로 반환하는 함수
if isinstance(val, int):
return 'int'
elif isinstance(val, float):
return 'float'
elif isinstance(val, str):
return 'string'
elif isinstance(val, list):
return 'list'
elif isinstance(val, dict):
return 'dict'
elif isinstance(val, tuple):
return 'tuple'
else:
return 'unknown'
def data_type(value):
# 입력 값이 list 형이면 하나씩 어떤 타입인지 위에서 선언한 함수를 거치게 함
if isinstance(value, list):
result = 'list, <'
for i in value:
result += get_data_type(i) + ', '
result = result[:-2] + '>'
else:
# 입력 값이 list 형이 아니면 위에서 선언한 함수를 거치게 함
result = get_data_type(value)
return result
print("2번 답안")
print(data_type([2, 3, [2, 3], "Hello"]))
type()를 사용하면 어떤 형식인지는 바로 알수있으나 문제에서 요구하는 형식의 int, float과 같이 바로바로 출력되지는 않아 파이썬의 isintance(인자, 인자의 타입)기능을 이용하여 문제를 풀어 보았습니다.
isintance를 사용하여 참거짓을 판별하여 리스트 일때와 아닐때로 분기를 나눠주고 우선 리스트가 아닐때는 float, int, tuple등등의 경우를 상정하여 각각의 출력을 내보내는 함수로 보내줍니다. 리스트 일때는 result 안에 리스트의 인자들을 get_data_type함수로 보내어 처리하고 마지막에는 뒤에 두자리 ', '를 [-2]로 잘라내어 >를 대신 넣어줍니다.
import math
def calc_tips(m, p = 10):
# 디폴트 값을 10프로로 지정
tip = m / 100 * p
tip = round(tip, 2)
totalM = m + tip
# math 모듈의 반올림 기능을 불러 실행
totalM = math.ceil(totalM)
print(f'식사비 : {m}, 팁 : {tip}')
print(f'총 결제 금액은 : {totalM}')
print("3번 답안")
print(calc_tips(4.5))
값을 올림해주는 math 모듈의 ceil기능을 사용하여 팁값과 기본요금을 더한값을 올림하여 문제의 요구사항을 만족시켰습니다.
def search_target(sentence, target):
idx = []
start_index = 0
while start_index < len(sentence):
index = sentence.find(target, start_index)
# print(index)
# index의 마지막은 -1이다.
if index == -1:
break
idx.append(index)
start_index = index + 1
return len(idx), idx
print("4번 답안")
sentence = "Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex."
target = "than"
print(search_target(sentence, target))
문장안에서 특정단어가 몇번 나왔으며 어디에있는지를 찾는 문제인데 우선 어디에 그 단어가 있는지 인덱스값을 저장한다면 몇번나왔는지 찾는것은 쉽기에 idx라는 리스트를 선언하여 find()를 사용하여 문장안에서 than이라는 단어가 출력된 부분을 찾았고 find는 끝까지 찾고나면 -1을 출력하는 특성을 이용해 while문이 -1이 되면 break되도록 설계하였습니다.
def div_ab(a,b):
n = 0
# 입력 인자가 정수인지 아닌지 판별
if not isinstance(a, int) or not isinstance(b, int):
print("입력 인자가 정수가 아닙니다.")
return
# 원본 a,b가 회손되지 않도록 재선언
numA = a
numB = b
#가장 원초적인 나눗셈
while True:
if numA < numB:
divNum = n
modNum = numA
break
elif numA >= numB:
numA = numA - numB
n += 1
print(f'{a}나누기 {b}의 결과 : 몫{divNum}, 나머지{modNum}')
print("5번 답안")
a = 3
b = 2
print(div_ab(a, b))
isinstance기능을 한번 더 사용하여 정수인지 아닌지를 판단하도록 하였습니다.
정수일 경우 나눈셈을 해야하는데 규칙상 /를 사용할수 없었기에 원초적인 나눗셈을 사용하여 몫과 나머지를 구하였습니다. 또한 깊은 복사 개념을 사용하여 print시에 초기 값을 보기위해 numA와 numB라는 변수를 따로 만들어 주었습니다.
def hanoi_sol(n, start_point, end_point):
# 기저 조건: 만약 원반이 1개라면 그냥 옮기고 종료
if n == 1:
print(f"{start_point} -> {end_point}")
return
# 중간 장소를 찾음 (A, B, C 중에서 start_point와 end_point가 아닌 것)
temp_point = [point for point in ['A', 'B', 'C'] if point != start_point and point != end_point][0]
# 가장 큰 원반을 제외한 나머지 원반들을 중간 장소로 옮김
hanoi_sol(n-1, start_point, temp_point)
# 가장 큰 원반을 목적지로 옮김
print(f"{start_point} -> {end_point}")
# 중간 장소로 옮겼던 나머지 원반들을 목적지로 옮김
hanoi_sol(n-1, temp_point, end_point)
# 예제 호출: 3개의 원반을 A에서 B로 옮기기
hanoi_sol(3, 'A', 'B')