본문 바로가기

Algorithms63

백준 2609. 최대공약수와 최소공배수 a와 b가 있을 때, 최대공약수야 반복문을 통해 구하면 되고, 최소공배수는 (a/gcd)*(b/gcd)*gcd로 구할 수 있다는 것을 알고 있으면 쉽다. a, b = map(int, input().split()) mx = max(a, b) mn = min(a,b) if mx == mn: print(mx) print(mx) exit() gcd = 1 for i in range(mn, 1, -1): if mx%i==0 and mn%i==0: gcd = i break print(gcd) print(int((mx/gcd) * (mn/gcd) * gcd)) 반복을 최소화하기 위해 반복문을 입력의 작은 값부터 2까지 돌아 최대공약수를 찾는다. 찾으면 바로 브레이크를 걸어 반복을 탈출하고, 출력한다. 만약 a와 b가.. 2022. 6. 9.
백준 1037. 약수 정수의 모든 약수를 준다는 건 페이크고, 사실 배수는 양쪽 끝의 약수를 곱해서 얻을 수 있다. 문제에서 1과 자기 자신은 약수로 주어지지 않는다고 했으므로 첫 약수와 마지막 약수를 곱해주면 된다. 물론 가운데 두 약수를 곱하는 방법도 있겠지만, 어차피 모든 약수가 한 번에 주어지기 때문에 큰 의미는 없는 것 같다. n = int(input()) lst = list(map(int, input().split())) res = min(lst) * max(lst) print(res) 2022. 6. 9.
백준 5086. 배수와 약수 매우 간단한 문제. a, b 두 숫자를 받고, a가 b의 약수면 'factor', 배수면 'multiple', 둘다 아니면 'neither' 를 출력하면 된다. 나머지 연산을 이용해서 풀었다. while True: a, b = map(int, input().split()) if a == 0 and b == 0: break if b % a == 0: print("factor") elif a % b == 0: print("multiple") else: print("neither") 사진 삭제 사진 설명을 입력하세요. 2022. 6. 9.
백준 1358. 하키 어떻게 하필 하키 문제?! 이번 문제는 링크장 위에 있는 선수들의 수를 구하면 된다. 링크장은 직사각형과 직사각형의 높이를 지름으로 하는 두 원이 이어진 형태로 이루어져 있다. 대표사진 삭제 사진 설명을 입력하세요. 그래서 저번 문제인 어린 왕자처럼, 거리를 구해서 풀 생각으로 접근했다. 다만 가운데 직사각형 부분에서는 거리를 구하는 것보다 단순 xy좌표를 따지는 게 쉬우므로 그렇게 처리했고, 그 경우가 아닐 때는 원의 중심으로부터의 거리를 재고 그걸 반지름과 비교하는 방법으로 했다. 원1의 중심은 (x, y+r) , 원2는 (x+w, y+r)이다. 이 때 r은 링크장 높이의 절반이다. W, H, X, Y, P = map(int, input().split()) r = H / 2 count = 0 for .. 2022. 6. 9.