life is egg
[Lv.0]분수의 덧셈 본문
import 안하고 풀어서 뿌듯하다고 할 수 있겠다

처음풀이
def solution(denum1, num1, denum2, num2):
answer = [0, 0]
answer[0] = (denum1 * num2) + (denum2 * num1)
answer[1] = num2 * num1
for a in range(1, answer[0] + 1):
if answer[0] % a == 0 and answer[1] % a == 0:
answer[0] = int(answer[0] / a)
answer[1] = int(answer[1] / a)
return answer
내 생각은 일단 (분모1*분자2+분모2*분모1) / 분자1*분자2 요렇게해서 나온값의 분모 분자의 공배수 로 나눈다는 생각이였다
그래서 1부터~ 분모값가지 증가시켜서 나눠지는 값으로해서
테스트케이스까지 통과하길래 이렇게풀면 맞을 줄 알았고 제출했는데 몇몇 케이스에서 오답이 나왔다
그래서 약간으....노가다로 다시 생각해봤는데 공배수가 중복되게 나눠지는 경우가 제외 된다는 헛점이 있었다..
예를들어 50/25를 ..5로 한번나누면 10/5가 되는데 여기서 한번더 5로 나눠야 기약분수형태인 2/1까지 간다
그래서..생각한게 그냥 같이 나눠지는 가장 큰값으로 나누면 되지 않을 까 라는 생각에 생각한 max_value 저장..!
def solution(denum1, num1, denum2, num2):
answer = [0, 0]
answer[0] = (denum1 * num2) + (denum2 * num1)
answer[1] = num2 * num1
max_value = 0
for a in range(1, answer[0] + 1):
if answer[0] % a == 0 and answer[1] % a == 0:
max_value = a
answer[0] = int(answer[0] / max_value)
answer[1] = int(answer[1] / max_value)
return answer
이렇게 가장 큰 공통으로 나눠지는 값을 저장해서 마지막에 한번만 나눠주면..! 기약분수 꼴이 된다.!
무튼..제출해서 합격했으니까 반례는 아직..존재안하는걸로..믿고싶다.
++
추가로.. 문제 복기하다가 생각한 다른풀이다..
def solution(denum1, num1, denum2, num2):
answer = [0, 0]
answer[0] = (denum1 * num2) + (denum2 * num1)
answer[1] = num2 * num1
ori = range(1, answer[0] + 1)
rev_ori=ori[::-1]
for a in rev_ori:
if answer[0] % a == 0 and answer[1] % a == 0:
answer[0] = int(answer[0] / a)
answer[1] = int(answer[1] / a)
return answer
max_value를 버리고 첫번째 생각한풀이에서 조금만 수정했다
for문 돌리는 배열을 뒤집어서 돌리면 큰값부터 작아지면서 공배수를 나누니까 굳이 max_value를 생각할 필요가 없다
다음에 고민해볼 문제는..
최빈값구하기 ...이건 IDE로 여러가지 시도해보면서 끼워 맞춰서 ...다른 사람 풀이 참고예정..!
'알고리즘 > 프로그래머스' 카테고리의 다른 글
| 3진법 뒤집기 (2) | 2023.01.13 |
|---|---|
| 배열 회전 시키기 (0) | 2023.01.12 |
| [연습문제]하샤드의 수 (0) | 2022.12.26 |
Comments