Python 진법, 등차수열, 등비수열, 시그마, 계차수열, 피보나치수열

dumbbelldore·2024년 11월 10일
0

zero-base 33기

목록 보기
18/97

1. 진법

  • 특정 숫자를 이용하여 수를 표시하는 방법을 말함
  • 2진법은 0과 1을, 10진법은 0~9의 숫자를 활용하여 수를 표기함 ex) 19(10)=10011(2)19_{(10)} = 10011_{(2)}
  • Python에서는 bin(), oct(), hex() 함수를 이용하여 10진수를 각 진수에 해당하는 값으로 변환할 수 있음
  • 반면, int() 함수를 이용하면 각 진수에 해당하는 값을 10진수로 변환할 수 있음 (단, 인자에는 string 형식으로 입력하여야 함에 유의)
digit10 = 19
print("10진수:", digit10) # 19
print("2진수:", bin(digit10)) # 0b10011
print("8진수:", oct(digit10)) # 0o23
print("16진수:", hex(digit10)) # 0x13

digit16 = '0x13'
digit8 = '0o23'
digit2 = '0b10011'
print(f"16진수 -> 10진수: {int(digit16, 16)}") # 19
print(f"8진수 -> 10진수: {int(digit8, 8)}") # 19
print(f"2진수 -> 10진수: {int(digit2, 2)}") # 19

2. 수열

  • 규칙성을 갖고 나열되어 있는 수를 지칭함
  • 2씩 증가하는 수열은 2, 4, 6, 8, 10, 12 ... 로 나타낼 수 있음

3. 등차수열

  • 연속된 두 항의 차이가 일정한 수열
  • an={2,5,8,11,14,17,20,23,26,29,...}a_{n} = \{2, 5, 8, 11, 14, 17, 20, 23, 26, 29, ...\}의 수열이 존재할 때, nn번째 행의 값을 출력하는 프로그램
degree = int(input("몇 번째 항까지의 수열을 출력할까요?"))
print(f"{degree}번째 항까지의 수열을 출력합니다.")

val = 2 # 시작값
gap = 3 # 공차
count = 1

while count <= degree:
    print(f"{count}번째 항의 값: {val}")
    val += gap
    count += 1
    
# 출력결과
# 몇 번째 항까지의 수열을 출력할까요? 7
# 7번째 항까지의 수열을 출력합니다.
# 1번째 항의 값: 2
# 2번째 항의 값: 5
# 3번째 항의 값: 8
# 4번째 항의 값: 11
# 5번째 항의 값: 14
# 6번째 항의 값: 17
# 7번째 항의 값: 20

4. 등비수열

  • 연속된 두 항의 비가 일정한 수열
  • an={2,4,8,16,32,64,128,256,...}a_{n} = \{2, 4, 8, 16, 32, 64, 128, 256, ...\}의 수열이 존재할 때, nn번째 행의 값을 출력하는 프로그램
degree = int(input("몇 번째 항을 출력할까요? "))
print(f"{degree}번째 항까지의 수열을 출력합니다.")

val = 2 # 시작값
gap = 2 # 공비
count = 1

while count <= degree:
    print(f"{count}번째 항의 값: {val}")
    val *= gap
    count += 1

# 출력결과
# 몇 번째 항을 출력할까요? 7
# 7번째 항까지의 수열을 출력합니다.
# 1번째 항의 값: 2
# 2번째 항의 값: 4
# 3번째 항의 값: 8
# 4번째 항의 값: 16
# 5번째 항의 값: 32
# 6번째 항의 값: 64
# 7번째 항의 값: 128

5. 시그마(\sum)

  • 시그마(\sum)는 수열의 합을 나타내는 기호
  • k=152k={2,4,6,8,10}\sum^{5}_{k=1} 2k = \{2, 4, 6, 8, 10\}의 등차수열을 확장하였을 때, 10번째 값까지의 합을 구하는 프로그램
# 등차수열 시그마 공식
# n_sum = n_degree * (start_val + n_val) / 2
# n_val = start_val + (n_degree - 1) * gap

n_degree = 10
start_val = 2
gap = 2

n_val = start_val + (n_degree - 1) * gap
n_sum = n_degree * (start_val + n_val) / 2
print(n_sum) # 110
  • k=1523(k1)={2,6,18,54,162}\sum^{5}_{k=1} 2 * 3^{(k-1)} = \{2, 6, 18, 54, 162\}의 등비수열을 확장하였을 때, 8번째 값까지의 합을 구하는 프로그램
# 등비수열 시그마 공식
# n_sum = start_val * (1 - (gap ** n_degree)) / (1 - gap)

n_degree = 10
start_val = 2
gap = 2

n_sum = start_val * (1 - (gap ** n_degree)) / (1 - gap)
print(n_sum) # 6560

6. 계차수열

  • 어떤 수열의 인접하는 두 항의 차로 이루어진 또 다른 수열
  • 0, 3, 8, 15, 24, 35의 수열의 두 항의 차로 이루어진 계차수열은 3, 5, 6, 9, 11이 됨
  • {3,7,13,21,31,43,57}\{3, 7, 13, 21, 31, 43, 57\}의 수열을 확장하였을 때, 8번째 값까지의 합을 구하는 프로그램
# 원본 수열 = {3, 7, 13, 21, 31, 43, 57}
#   계차 수열 = {4, 6, 8, 10, 12, 14}

origin_start = 3
origin_degree = 8

diff_start = 4
diff_gap = 2

for i in range(origin_degree):
    if i == 0:
        print(f"{i+1}번째 수열의 값: {origin_start}")

    else:
        origin_start += diff_start
        print(f"{i+1}번째 수열의 값: {origin_start}")
        diff_start += diff_gap

# 출력결과
# 1번째 수열의 값: 3
# 2번째 수열의 값: 7
# 3번째 수열의 값: 13
# 4번째 수열의 값: 21
# 5번째 수열의 값: 31
# 6번째 수열의 값: 43
# 7번째 수열의 값: 57
# 8번째 수열의 값: 73

7. 피보나치 수열

  • nn항의 값이 (n1)(n-1)항과 (n2)(n-2)항의 합으로 구성되는 수열
  • 10번째 항까지의 피보나치 수열을 출력하는 프로그램
first_num = 1
second_num = 1
curr_num = 0

for i in range(10):
    if i == 0:
        curr_num = first_num
        print(f"{i+1}번째 수열: {curr_num}")

    elif i == 1:
        curr_num = second_num
        print(f"{i+1}번째 수열: {curr_num}")

    else:
        curr_num = first_num + second_num
        print(f"{i+1}번째 수열: {curr_num}")
        first_num = second_num
        second_num = curr_num
        
# 출력결과
# 1번째 수열: 1
# 2번째 수열: 1
# 3번째 수열: 2
# 4번째 수열: 3
# 5번째 수열: 5
# 6번째 수열: 8
# 7번째 수열: 13
# 8번째 수열: 21
# 9번째 수열: 34
# 10번째 수열: 55

*이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.

profile
데이터 분석, 데이터 사이언스 학습 저장소

0개의 댓글