본문 바로가기
Python/알고리즘

[COS PRO 1급 #5-8] 그래프에서 싸이클 찾기

by 포푸리 (POPOOLY) 2023. 3. 5.
반응형

문제설명

세 수 a, b, c의 공약수가 몇 개인지 구하려고 합니다. 공약수란, 동시에 모든 정수의 약수인 정수를 뜻합니다. 예를 들어, 세 수 24, 9, 15의 공약수는 1, 3이고, 따라서 양의 공약수는 2개입니다.

세 수의 공약수가 몇 개인지 구하기 위해 다음과 같이 프로그램 구조를 작성했습니다.

```
1. 세 수의 최대공약수를 구합니다.
2. 앞서 구한 최대공약수의 약수가 몇 개인지 구합니다.
```

세 수 a, b, c가 매개변수로 주어질 때, 세 수의 약수가 몇 개인지 return 하도록 solution 함수를 작성하려 합니다. 위 구조를 참고하여 코드가 올바르게 동작할 수 있도록 빈칸에 주어진 func_a, func_b, func_c 함수와 매개변수를 알맞게 채워주세요.

매개변수 설명

세 수 a, b, c가 매개변수로 주어집니다.
* 세 수 a, b, c는 1 이상 1,000 이하인 정수입니다.

return 값 설명

세 수의 약수가 몇 개인지 return 합니다.

예시

| a  | b | c  | return |
|----|---|----|--------|
| 24 | 9 | 15 | 2      |

예시 설명

문제에 나온 예와 같습니다.

문제 코드

def func_a(a, b):
	mod = a % b
	while mod > 0:
		a = b
		b = mod
		mod = a % b
	return b

def func_b(n):
	answer = 0
	for i in range(1, n+1):
		if func_@@@(@@@):
			answer += 1
	return answer

def func_c(p, q):
	if p % q == 0:
		return True
	else:
		return False

def solution(a, b, c):
    answer = 0
    gcd = func_@@@(func_@@@(@@@)@@@)
    answer = func_@@@(@@@)
    return answer

풀이

# 유클리드 호제법으로 최대공약수 구하기
# https://ko.wikipedia.org/wiki/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C_%ED%98%B8%EC%A0%9C%EB%B2%95
def func_a(a, b):
	mod = a % b
	while mod > 0:
		a = b
		b = mod
		mod = a % b
	return b

# 약수의 개수 구하기
def func_b(n):
	answer = 0
	for i in range(1, n+1):
		if func_c(n, i):
			answer += 1
	return answer

# q가 p의 약수인지 구하기
def func_c(p, q):
	if p % q == 0:
		return True
	else:
		return False

def solution(a, b, c):
    answer = 0
    gcd = func_a(func_a(a, b), c)
    answer = func_b(gcd)
    return answer

댓글