2021. 5. 2. 16:51ㆍ개발공부/알고리즘
1037번: 약수
첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되
www.acmicpc.net
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번: 최대공약수와 최소공배수
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.
www.acmicpc.net
최대공약수와 최소공배수는 정말이지.. 중학생이후로 정말 구해본 적이없는 나😭
어떻게 하더라.. 하며 손으로 끄적끄적 구해보았는데 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))
이 코드는 최대공약수, 최소공배수의 원리를 잘 이해하고있어야 이해할 수 있는 코드인것같다. 이 코드도 참고해서 다시 풀어봐야겠다.
'개발공부 > 알고리즘' 카테고리의 다른 글
[파이썬] 백준 1149번 RGB거리 (0) | 2021.05.02 |
---|---|
[파이썬] 백준 9461 파도반 수열 (0) | 2021.05.02 |
[파이썬] 곱하기 or 더하기 - 페이스북 기출문제 (0) | 2021.05.02 |
[파이썬] 백준 2884 알람시계 (0) | 2021.05.02 |
[파이썬] 백준 10250 ACM호텔 (0) | 2021.05.02 |