Python 함수 내에서 count하기

줍줍·2023년 5월 7일
0

Python

목록 보기
2/4
post-thumbnail

Python에서 count


Python에서 count를 할 때 전역변수를 사용한다고 하면 global keyword를 사용해야 한다.

예시 0.

count = 0
def function():
	global count
    count = 1

functino()
print(count)

예시 1. hanoi 함수 count하기


hanoi tower에서 2^n-1 이 아니라 직접 count 할 수는 없을까 생각했다. 코드는 아래와 같다.

count = 0
def hanoi(n, a, b, c):
    global count
    if n>=1:
        count += 1
        hanoi(n-1, a, c, b)
        print(a, c)
        hanoi(n-1, b, a, c)

number = int(input())
print((2**number-1))
hanoi(number, '1', '2', '3')
print(count)

예시 2. fibonacci 함수 count하기


백준 24416 문제인데 python3으로 하면 시간초과가 났고 pypy3으로 하면 괜찮았다.

import sys
input = sys.stdin.readline

N = int(input())

count = 0
def fib(n):
  global count
  if n == 1 or n==2:
    count += 1
    return 0
  else:
    count += 1
    return fib(n-1) + fib(n-2)
fib(N)
print(count, N-2)

그래서 다른 분들의 코드를 참고했다.

n=int(input())
def fib(n):
    f=[0,1,1]
    for i in range(3, n+1):
        ff=f[i-1]+f[i-2]
        f.append(ff)
    return f[n]
print(fib(n), n-2)
## chpark_6363님의 코드
f=[0]*50
f[1]=f[2]=1
n=int(input())

def fib(n):
    for i in range(3, n+1):
        f[i] = f[i-1]+f[i-2]
    return f[n]

cnt1=fib(n)
cnt2= n-2
print(cnt1, cnt2)
## woso31님의 코드

직접 fibonacci 연산을 진행하면서 count를 다 더하는 게 아니라 비슷한 모양으로 바꿔서 구하셨다.

그러다가 https://shoark7.github.io/programming/algorithm/피보나치-알고리즘을-해결하는-5가지-방법 이 글을 봤는데 피보나치 정리가 가장 잘 되어 있었고 많은 도움을 받았다.

재귀 + 동적 프로그래밍을 어떻게 하는지랑 또 행렬을 이용해서 피보나치를 할 수 있다는 점도 처음 알았다.

저번에 친구가 cache를 사용에 미리 -1을 넣어놓고 나중에 -1이 있는지 없는지 확인하는 방식으로 프로그래밍을 할 수 있다고 알려줬는데 여기서 발견해서 놀라웠다.

재귀는 정말 너무 보면 볼수록 매력적이다.

profile
쉽게 설명하지 못하면 이해 못한 것

0개의 댓글