life is egg

[Lv.0]분수의 덧셈 본문

알고리즘/프로그래머스

[Lv.0]분수의 덧셈

삶은계란진재혁 2022. 11. 17. 01:15

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