백준 1037 약수 & 2609 최대공약수와 최소공배수

devmonkey·2021년 3월 13일
0

백준 1037 약수

import sys

cnt = int(input())
for i in range(cnt):
      j = list(map(int, sys.stdin.readline().split()))
print(max(j)*min(j))

코드를 잘 적었다고 생각했지만 내가 원했던 출력값이 나오지않는다.
입력받은 cnt가 2라면 j리스트에 2번의 입력을 받을 수 있길 원했지만, 결과는

이런 식으로 리스트 입력이 두배로 받아진다😭

import sys
cnt = int(input())
j = list(map(int, sys.stdin.readline().split()))
print(max(j)*min(j))

결국 for문을 빼고 더 단순하게 만들었다.
결과는 성공!!

백준 2609 최대공약수와 최소공배수

최대공약수와 최소공배수는 정말이지.. 중학생이후로 정말 구해본 적이없는 나😭
어떻게 하더라.. 하며 손으로 끄적끄적 구해보았는데 10년이 흘러도 손은 기억하고있었다😂

a, b = map(int, input().split())

def find_gcd_lcm(a,b):
    for i in range(1, a+1):
        if a % i == 0:
            if b % i == 0:
                gcd=i #for문 다 돌면서 마지막 gcd프린트
    print(gcd)
    if gcd == 1: #최대공약수가 1이라면 서로소
        lcm = a*b
    else:
        lcm = gcd * (a // gcd) * (b // gcd)#최소공배수 구하는 코드
    print(lcm)

find_gcd_lcm(a,b)

이 코드를 보고 처음에 최대공약수를 구하는 for문을 잘못 이해하고 최대가 아니고 최소..공약수가 구해지는거아냐ㅠㅠ?했지만, 다시보니 for문이 gcd=i가 되는 순간 끝나는게아니고 range내의 마지막 gcd를 찾을때까지 계속 도는 것이다.

그래서 마지막 gcd를 찾았다면 그것이 바로 최대공약수!

lcm 최소공배수를 구하는 코드는 하나하나 뜯어본다기보단 그냥 아 이런 식을 사용하면 최소공배수가 구해지구나 라고 받아들였다.

팀원 중 한 분이 가져오신 코드는 훨씬 간단했다.

a,b = list(map(int, input().split()))
a_1,b_1 = a,b
while b != 0:
    a = a % b
    a,b = b,a
print(a)
print(int(a_1*b_1/a))

이 코드는 최대공약수, 최소공배수의 원리를 잘 이해하고있어야 이해할 수 있는 코드인것같다. 이 코드도 참고해서 다시 풀어봐야겠다.

profile
매일 배우고 성장 중 담는 개인기록

0개의 댓글

관련 채용 정보