2022. 12. 21. 16:37ㆍcode/[프로그래머스] python
문제
첫 번째 분수의 분자와 분모를 뜻하는 denum1, num1, 두 번째 분수의 분자와 분모를 뜻하는 denum2, num2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
❗제한사항❗
- 0 <denum1, num1, denum2, num2 < 1,000
입출력 예
입출력 예 설명
입출력 예 #1
- 1 / 2 + 3 / 4 = 5 / 4입니다. 따라서 [5, 4]를 return 합니다.
입출력 예 #2
- 9 / 2 + 1 / 3 = 29 / 6입니다. 따라서 [29, 6]을 return 합니다.
✔풀이
def solution(denum1, num1, denum2, num2):
denum3 = denum1 * num2 + denum2 * num1
num3 = num1 * num2
for denum in range(denum3, 1, -1):
if (denum3%denum==0) and (num3%denum==0):
denum3=denum3/denum
num3 = num3/denum
answer = [denum3,num3]
return answer
📝설명
우선 denum3와 num3를 만들었다. 주어진 분모, 분자가 기약분수화 되기 전 단계이다. 분수화했을 때, 해당값이 기약분수라면 그대로 가면 아주 좋다..(내 개인적인 의견)
하지만, 모든 값들이 곧장 기약분수가 될 리가 없다.
최대공약수를 구해서 기약분수를 만들어줘야 한다.
최대공약수를 구할 수 있는 방법은 분모와 분자에 같은 수를 나눴을 때 나머지가 없도록 하는 가장 큰 수니까, 어떻게 진행할까 고민했다.
결론적으로 for문으로 진행했다.
range(denum3,1,-1)을 다뤘다.
range안의 범위 설정을 하기까지 진짜 오류가 많이 났었는데,, 정말 신경이 온통 여기에 쏠리는 걸 경험했다.
어쨌든, 이걸 해석하면 denum3에서 1-(-1)까지의 -1씩 더하게 했다.
만약 denum3이 4라면 denum으로는 4,3,2가 다뤄진다는 말!!
이렇게 구한 denum을 denum과 num에 나눈다.
나머지가 둘 다 0이라면, 앞선 구했던 denum3과 num3에서 denum을 나눈다.
그 후 answer에 넣어주면 끝!
👑모범 답안
🔎 math 라이브러리를 사용했다.
그래서 import로 math를 불렀다.
gcd는 최대 공약수인 정수를 구해준다고 한다.
예를 들어 math.gcd(12,27)라면, 3이 된다.
참고로 최소공배수는 lcm로 구할 수 있다고 한다.
👀느낀 점
: 지금까지 푼 코딩 문제 중 가장 많은 시간을 소요했다.
스트레스^^... 도 조금 받은 것 같은데, 해결하고 나니 이렇게 뿌듯할 수가 없다.
이게 바로 내가 코딩을 시작하게 된 이유🤸🏻♀️🤸🏻♀️🤸🏻♀️
파이썬에는 생각보다 많은 함수들이 있고, 난 아직 그런걸 잘 모른다.
계속 코딩 테스트 문제 푸는 걸 병행하면서 많은 것들을 경험하고 내 것으로 만들테야
'code > [프로그래머스] python' 카테고리의 다른 글
[코딩 테스트 연습 입문] 짝수의 합 (0) | 2022.12.21 |
---|---|
[코딩 테스트 연습 입문] 삼각형의 완성조건 (1) (0) | 2022.12.21 |
[코딩 테스트 연습 입문] 배열 두 배 만들기 (0) | 2022.12.21 |
[코딩 테스트 연습 입문] 중복된 숫자 개수 (0) | 2022.12.21 |
[코딩 테스트 연습 입문] 특정 문자 제거하기 (0) | 2022.12.21 |