코딩도장 심사문제모음

26.9 심사문제 : 공약수 구하기

codermun 2020. 10. 28. 18:54
728x90
반응형

표준 입력으로 양의 정수 두 개가 입력됩니다. 다음 소스 코드를 완성하여 두 숫자의 공약수를 세트 형태로 구하도록 만드세요. 단, 최종 결과는 공약수의 합으로 판단합니다.

사용한 코드

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
반응형