2시간을 고민했으나 풀지 못했다.. level 0에서 막히는건 처음이다 😥 최대공약수를 구해 기약분수를 구현하는 데까지는 성공했으나, 소인수 판별에서 막혀 결국 다른 사람의 풀이를 참고해서 풀어보았다.
from math import gcd
def solution(a, b):
b //= gcd(a,b) # b를 a,b의 최소공약수로 나눔
while b%2==0:
b//=2
while b%5==0:
b//=5
return 1 if b==1 else 2
이 사람은 최대공약수를 직접 구현하지 않고 모듈을 사용했다.
참신했던 것은, 소인수분해를 구현하지 않고 while문을 사용해 2, 5를 인수로 갖는지 판별한 점이다!
유클리드 호제법(최대공약수 구하기)과 소인수분해를 직접 구현한 풀이
# 유클리드 호제법
def gcd(a, b):
if a % b == 0:
return b
else:
return gcd(b, a%b)
# 소인수분해
def factorization(x):
d = 2
output = []
while d <= x:
if x % d == 0:
output.append(d)
x /= d
else:
d += 1
return output
def solution(a, b):
divide_num = gcd(b, a)
result = b // divide_num
for num in factorization(result):
if num not in [2, 5]:
return 2
return 1
index()
는 중복된 값이 있을 때 제일 앞의 값을 return함def solution(score):
avg = []
result = []
for em in score:
avg.append(sum(em) / 2)
rank = sorted(avg, reverse=True)
for rnk in avg:
result.append(rank.index(rnk)+1)
return result
def solution(score):
rank = sorted([sum(s) / 2 for s in score], reverse=True)
rankDict = {}
for i, r in enumerate(rank):
if r not in rankDict.keys():
rankDict[r] = i + 1
return [rankDict[sum(s) / 2] for s in score]
sorted
의 key
파라미터 활용def solution(numlist, n):
return sorted(numlist, key=lambda x : (abs(x - n), -x))
def solution(numbers):
lst = []
for i in range(len(numbers)):
for j in range(i+1, len(numbers)):
lst.append(numbers[i]*numbers[j])
return max(lst)
def solution(numbers):
numbers = sorted(numbers)
return max(numbers[0] * numbers[1], numbers[-1]*numbers[-2])