관리 메뉴

솜씨좋은장씨

[BaekJoon] 14490번 : 백대열 (Python) 본문

Programming/코딩 1일 1문제

[BaekJoon] 14490번 : 백대열 (Python)

솜씨좋은장씨 2021. 8. 29. 17:07
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 백준의 백대열 입니다.

백준의 백대열 문제를 파이썬으로 풀이하였습니다.

 

14490번: 백대열

n과 m이 :을 사이에 두고 주어진다. (1 ≤ n, m ≤ 100,000,000)

www.acmicpc.net

 

👨🏻‍💻 문제 풀이

숫자 N과 M 이 : 을 사이로 두고 주어지면 두 숫자를 약분한 값을 출력하는 문제입니다.

두 숫자를 약분하여 더이상 나누어지지 않는 숫자로 나누기 위해서는 

두 숫자의 최대공약수로 나누어야 합니다.

만약 N이 100 M이 10 이라면 이 둘의 최대공약수인 10을 활용하여 나누면 원하는 값인 10과 1이 나옵니다.

18과 24일 경우라면 최대공약수 6을 활용하여 나누면 됩니다.

최대공약수는 Python의 경우에는 기본으로 제공되는 함수중에 math 의 gcd를 활용하면 정말 쉽게 구할 수 있습니다.

from math import gcd

입력을 받을 때

 

위와 같이 : 을 가운데에 둔 형태로 두 숫자를 입력 받기에

이를 숫자 2개로 바꾸어주기 위해서는 ":"를 기준으로 split 해주고 map을 통해 int 로 바꾸어주어야합니다.

num1, num2 = map(int, string.split(":"))

여기서 최대공약수를 아까 import 한 gcd 로 구해줍니다.

gcd_num = gcd(num1, num2)

마지막으로 정답의 형태도 입력을 받았을 때와 같이 ":" 를 기준으로 양 옆에 숫자를 붙인 형태이므로

이를 f-string을 활용하여 만들어줍니다.

f"{num1 // gcd_num}:{num2 // gcd_num}"

전체 코드는 아래를 참고해주세요.

👨🏻‍💻 코드 ( Solution )

from math import gcd

def solution(string):
    num1, num2 = map(int, string.split(":"))
    
    gcd_num = gcd(num1, num2)
    
    return f"{num1 // gcd_num}:{num2 // gcd_num}"

if __name__ == "__main__":
    string = input()
    print(solution(string))
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments