👉 오늘 한 일
프로그래머스 문제풀이
1. 분수의 덧셈
- 최소공배수를 이용해 분수의 덧셈을 구한 후 기약분수가 아니면 최대공약수로 나눠주기
import math
def solution(numer1, denom1, numer2, denom2):
lcm = int(denom1 * denom2 / math.gcd(denom1, denom2))
num = int((numer1 * lcm / denom1) + (numer2 * lcm / denom2))
gcd_f = math.gcd(lcm, num)
if gcd_f != 1:
lcm /= gcd_f
num /= gcd_f
return [num, lcm]
- 다른 사람 풀이
- 모듈을 사용하지 않고 최대공약수를 구한 점이 좋은 풀이인 것 같음
def solution(denum1, num1, denum2, num2):
answer = []
s = 0
denum0 = (denum1*num2) +(denum2*num1)
num0 = num1*num2
for i in range(min(denum0,num0),0,-1):
if denum0%i == 0 and num0%i == 0:
s = i
break
denum0 /= s
num0 /= s
answer.append(denum0)
answer.append(num0)
return answer
2. 연속된 수의 합
- 입출력 예에서 패턴을 찾다가 중앙값을 활용할 수 있다는 것을 발견하고 이를 활용. 제일 처음 값을 찾는데 활용함. num이 짝수일 때는 중앙값이 두 개가 돼버려서 둘 중 작은 값에서
몫 - 1
을 빼줌
def solution(num, total):
result = []
if num % 2 != 0:
median = total / num
for i in range(num):
result.append(median - int(num / 2) + i)
else:
share = num // 2 - 1
median_smaller = int(total / num)
for i in range(num):
result.append(median_smaller - share + i)
return result
- 다른 사람 풀이
- 제일 처음 값을 이런 방식으로도 찾을 수 있었다!
def solution(num, total):
answer = []
var = sum(range(num+1))
diff = total - var
start_num = diff//num
answer = [i+1+start_num for i in range(num)]
return answer