본문 바로가기
개발일지/Python

2022.02.07 파이썬 시간복잡, 공간복잡 에 대한 수학의 중요성.

by 다니엘의 개발 이야기 2022. 2. 7.
320x100
# 들어가는 글
'''
import math

def abs_sign(a):
    if a >=0:
        return a
    else:
        return -a

def abs_square(a):
    b = a*a
    return math.sqrt(b)

print(abs_sign(5))
print(abs_sign(-3))
print()
print(abs_square(5))
print(abs_square(-3))
'''
# 첫번째 마당
# 알고리즘 기초

# 첫번째 문제
'''
# 내가 푼 문제
# 1. 1부터 10까지의 수를 모두 더하면?

 total = 0
for i in range(1,11):
    total += i
print(total)

# 2. 1부터 100까지의 수를 모두 더하면?

total = 0
for i in range(1,101):
    total += i
print(total)
# 너무 연습이 되어있어서 쉽게 풀었다. 하지만 해설을 보자 내 코드가 좋은 코드가 아님을 깨달았다.
# 왜냐하면 간단하게 축약이 가능하기 때문이다.
# 함수 정의 기능을 사용해서 답안 보지 말고 해보자
'''
'''
# 내가 함수 정의해서 다시 풀어본 문제
# 1회 실패. - 위에 먼저 풀어두었던 수식을 주석처리 하지 않아서
# 2회 실패 - 이미 정의된 함수에 print 기능이 내장되어있음에도 print(hand(10)) 이런식으로 써줘서 값이 none, 55 이런식으로 나왔다.


def hand(i):
    total=0
    for a in range(i+1): # 이거는 생각조차 못하고 있었는데 해설을 배꼈다. i+1만 하지만 이것도 크다.
        total +=a
    print(total)


hand(10)
hand(100)
'''

'''
# 첫번째 해설코드

# 1부터 n까지 연속한 숫자의 합을 구하는 알고리즘 1
# 입력 n
# 출력 1부터 n까지의 숫자를 더한 값

def sum_n(n):
    s = 0
    for i in range(1,n+1):
        s= s+i
    return s # 이부분에서 나의 정의 수식과 차이점이 되었다. 보통 보면 마지막 정의를 return으로 해주더라. print가 아니라.
            # 경우에 따라서 달라질 수 있겠지만 이 케이스에서는 마지막 정의를 print로 하게 되면 불필요한 값까지 출력된다.

print(sum_n(10))
print(sum_n(100))
'''

'''
# 두번째 해설코드

def sum_n(n):
    return n *(n+1) //2

print(sum_n(10))
print(sum_n(100))

# 확실히 선순위가 함수정의. 후순위로 수학 수식까지 알면 정말 수식이 간결해진다.
# 이 수식에 대해서 본 기억은 있으나 전혀 기억나지 않았다.
'''

'''
위 처럼 같은 문제를 풀때도 두개의 해설을 준 이유가,
식이 보기에도 간결할 수록, 연산이 짧아질 수록 프로그램을 돌리는데 좋은 코드라고 한다
첫번째 해설코드는 덧셈 n번이지만 두번째는 덧셈,곱셈,나눗셈 각 한번으로써 총 세번으로 끝난다고 한다.

시간 복잡도
공간 복잡도에 대해서도 말했다.

주저리 거릴필요도 없다.
내가 동일한 문제를 직면했을때 얼마나 수학수식에 대해서 내 안에 녹아져 있느냐 없느냐에 따라서
저런 코드를 만들어 낼 수 있을거라고 생각한다.
'''
300x250