💥 PERSONAL CODEKATA
기억에 남는 문제들만 기재
from fractions import Fraction
def solution(numer1, denom1, numer2, denom2):
if not (0 < numer1 and denom1 and numer2 and denom2 < 1000):
print("제한사항을 어겼습니다.")
exit()
n1 = numer1/denom1
n2 = numer2/denom2
sumnum = n1+n2 # 1.25
res = Fraction(sumnum).limit_denominator() # 5/4
dd = str(res).replace('/', ' ')
dd2 = dd.split(' ')
result = list(map(int, dd2))
return result
print(solution(1,2,3,4)) # [5, 4]
print(solution(9,2,1,3)) # [29, 6]
print(solution(-9,2,1,3)) # 제한사항을 어겼습니다.
=>
소수점을 분자분모로 어떻게 변환하는지 검색해봄.
Fraction 함수를 사용하는 방법이 있어서 써봤는데, 코테 결과에서는 실패한 것도 나왔다. 흠 이 함수를 쓰는걸 원하는 게 아닌듯.
플머스에 유클리드 호제법 으로 풀린다고 해서 이걸로 다시 짜보겠음

# 유클리드고 뭐고 모르겠고 fraction 써서 풀었음
# 위는 fraction에서 다시 문자열 변환하고 replace쓰고 split쓰고 난리났는데,
# 자체 기능에서 분자 분모만 불러오는게 있었음 XX.numerator, XX.denominator
from fractions import Fraction
def solution(numer1, denom1, numer2, denom2): # 1.25
res = Fraction(numer1, denom1) + Fraction(numer2, denom2) # 5/4
print(res)
return [res.numerator, res.denominator]
# 유클리드 호제법 검색해도 수학수학해서 무슨 소린지 ..ㅋ..
# 유클리드 호제법으로 푼 코드
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
def solution(numer1, denom1, numer2, denom2):
answer = [numer1 * denom2 + numer2 * denom1, denom1 * denom2]
GCD = gcd(answer[0], answer[1])
answer[0], answer[1] = answer[0] // GCD, answer[1] // GCD
return answer
print(solution(9,2,1,3))
# 버전1
from decimal import Decimal, ROUND_HALF_UP
def solution(mylist):
if (len(mylist) % 2 == 0) or not (0 < len(mylist) < 100):
print("제한사항을 어겼습니다.")
exit()
halfnum = (len(mylist) / 2)
resultnum = Decimal(halfnum).quantize(Decimal('1'), rounding=ROUND_HALF_UP) -1
x = int(resultnum)
mylist.sort()
return mylist[x]
myarray3 = [1, 2, 7, 10, 11, 4, 3]
print(solution(myarray3))
=>
0.5 에서 바로 반올림 되는걸 원했는데, round() 는 0.5에서 바로 반올림되지 않았음.
decial 모듈을 가져와야 해서 이걸 써봄.
리스트 길이 나누기 2 를 하고, 홀수가 무조건 나오니까 0.5에서 반올림 해서 . ....
...쓰는 도중에 그냥 소수점 버리면 되잖아? 라고 깨달음ㅋㅋ 바로 코드 수정함
int() 쓰면 소수점 무조건 버리게 되어있음
# 버전2
def solution(mylist):
if (len(mylist) % 2 == 0) or not (0 < len(mylist) < 100):
print("제한사항을 어겼습니다.")
exit()
halfnum = int(len(mylist) / 2)
mylist.sort()
return mylist[halfnum]
myarray3 = [1, 2, 7, 10, 11, 4, 3]
print(solution(myarray3))

def solution(myarray):
if not (0 < len(myarray) < 100) or not (0 <= x < 1000 for x in myarray):
print("제한사항을 어겼습니다.")
exit()
mydict = {i: myarray.count(i) for i in myarray}
print(mydict)
maxvalue = max(mydict.values())
if list(mydict.values()).count(maxvalue) > 1:
maxkey = -1
else:
maxkey = max(mydict, key=mydict.get)
return maxkey

▲ dict 에서 value 기준으로 max key 찾는 법

~까지 완료
'Sparta > CODEKATA' 카테고리의 다른 글
| [250826] 스파르타코딩 본캠프 16일차 - 도전과제 (3) | 2025.08.26 |
|---|---|
| [250825] 스파르타코딩 본캠프 15일차 (2) - 필수과제 (2) | 2025.08.25 |
| [250822] 스파르타코딩 본캠프 14일차 (2) (0) | 2025.08.22 |
| [250821] 스파르타코딩 본캠프 13일차 (2) (0) | 2025.08.21 |
| [250820] 스파르타코딩 본캠프 12일차 (2) (0) | 2025.08.20 |