[TIL] 23.01.29

문종현·2023년 1월 29일
0

TIL

목록 보기
72/119
post-custom-banner

👉 오늘 한 일

  • 프로그래머스 문제풀이(level 0)

프로그래머스 문제풀이

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
profile
자라나라 새싹새싹🌱
post-custom-banner

0개의 댓글