-
26.9 심사문제 : 공약수 구하기코딩도장 심사문제모음 2020. 10. 28. 18:54728x90
표준 입력으로 양의 정수 두 개가 입력됩니다. 다음 소스 코드를 완성하여 두 숫자의 공약수를 세트 형태로 구하도록 만드세요. 단, 최종 결과는 공약수의 합으로 판단합니다.
사용한 코드
1. map
2. set
3. input
4. split
5. for 문
6. if 문
첫 접근 방법
공약수의 개념을 알고 있다면 for 문 , if 문 사용시 어렵게 않게 어떤 범위까지 반복해야하는지, 검증은 어떤것을 해야하는지
자연스럽게 알게 되는 문제다.
입력 10 20
출력 18로 보았을때
10 의 약수는 1, 2, 5, 10
20의 약수는 1, 2, 4, 5, 10, 20
10과 20의 공약수의 합이 18이라는 것을 알 수 있다.
풀이
1. 먼저 입력값을 기준으로 해당 입력값의 공배수를 알아야하기에
a, b = map(int, input().split()) 으로 a, b 를 int로 받는다
추후 range의 범위로 사용하기 위해서이다.
a, b = map(int, input().split())
2. a , b 의 각각의 약수를 구하는 방법을 set 표현식으로 정해준다.
아래 divisor 조건문을 변경할수 없을뿐더러 set 표현식을 쓰라는 의미로 해석된다.
a = {i for i in range(1, a+1) if a % i == 0}
b = {j for j in range(1, b+1) if b % j == 0}
먼저 range 범위는 0이 아닌 1을 시작으로 하며 자기 자신이 항상 약수로 되어 있기에 +1로 자기자신까지 포함시키주면 된다.
뽑아오는 i 값으로 a를 나누어 나머지가 0 이라는 조건으로 a의 약수를 구할 수 있다
※ 실제 코딩 도장의 해법과 다를 수 있으며, 답은 여러가지가 존재합니다.
코딩 지적 정말 감사히 받겠습니다.
728x90'코딩도장 심사문제모음' 카테고리의 다른 글
27.5 연습문제 : 파일에서 10자 이하인 단어 개수 세기 (0) 2020.10.29 24.6 심사문제 : 높은 가격순으로 출력하기 (0) 2020.10.29 26.8 연습문제 : 공배수 구하기 (0) 2020.10.28 25.8 심사문제 : 딕셔너리 특정 값 삭제하기 (0) 2020.10.26 25.7 연습문제 : 평균점수구하기(dictionary이용) (0) 2020.10.26