[제로베이스_데이터 취업 스쿨] 스터디노트11

박소현·2023년 8월 15일
0

데이터 공부

목록 보기
13/31

개념을 배웠던 지난 강의 시간에 이어서 이번 강의에는 문제를 집중적으로 풀어보는 시간을 가졌다. 항상 느끼지만 화면을 보면서 코드를 따라치고 그 날의 진도를 따라가기가 바빠서 이해도에 100% 중점을 두기 보다는 진도를 끝내는 것에 더 포커스가 맞춰져있는 것 같아서 걱정이 된다.
내용은 너무 어렵고 방대하다 ㅠㅠ

약수와 소수

import random

rNum = random.randint(10, 50)
print(f'rNum: {rNum}')

for num in range(1, rNum+1):

    soinsuFlag = 0

    if rNum % num == 0:
        print(f'[약수]: {num}')
        soinsuFlag += 1

    if num != 1:
        flag = True
        for n in range(2, num):
            if num % n == 0:
                flag = False
                break

        if(flag):
            print(f'[소수]: {num}')
            soinsuFlag += 1

    if soinsuFlag >= 2:
        print(f'[소인수]: {num}')
rNum: 30
[약수]: 1
[약수]: 2
[소수]: 2
[소인수]: 2
[약수]: 3
[소수]: 3
[소인수]: 3
[약수]: 5
[소수]: 5
[소인수]: 5
[약수]: 6
[소수]: 7
[약수]: 10
[소수]: 11
[소수]: 13
[약수]: 15
[소수]: 17
[소수]: 19
[소수]: 23
[소수]: 29
[약수]: 30

소인수와 소인수분해

import random

rNum = random.randint(100, 1000)
print(f'rNum: {rNum}')

soinsuList = []

n = 2
while n <= rNum:
    if rNum % n == 0:
        print(f'소인수: {n}')
        soinsuList.append(n)
        rNum /= n
    else:
        n += 1

print(f'soinsuList: {soinsuList}')

tempNum = 0
for s in soinsuList:
    if tempNum != s:
        print(f'{s}\'s count: {soinsuList.count(s)}')
        tempNum = s
rNum: 584
소인수: 2
소인수: 2
소인수: 2
소인수: 73
soinsuList: [2, 2, 2, 73]
2's count: 3
73's count: 1

584의 소인수는 2와 73이고 소인수분해를 하면 2^3 * 73 이다.

최대공약수

import random

rNum1 = random.randint(10, 100)
rNum2 = random.randint(10, 100)

print(f'rNum1: {rNum1}')
print(f'rNum2: {rNum2}')

for n in range(1, (min(rNum1, rNum2)+1)):
    if rNum1 % n == 0 and rNum2 % n == 0:
        print(f'공약수: {n}')
        maxNum = n

print(f'최대공약수: {maxNum}')

if maxNum == 1:
    print(f'{rNum1}{rNum2}는 서로소이다.')
rNum1: 15
rNum2: 74
공약수: 1
최대공약수: 1
1574는 서로소이다.

두 수의 최대공약수가 1인 경우, '서로소'라고 부른다.

최소공배수

import random

rNum1 = random.randint(1, 100)
rNum2 = random.randint(1, 100)

print(f'rNum1: {rNum1}')
print(f'rNum2: {rNum2}')

maxNum = 0
for n in range(1, (min(rNum1, rNum2)+1)):
    if rNum1 % n == 0 and rNum2 % n == 0:
        print(f'공약수: {n}')
        maxNum = n

print(f'최대공약수: {maxNum}')

minNum = (rNum1 * rNum2) // maxNum
print(f'최소공배수: {minNum}')
rNum1: 66
rNum2: 30
공약수: 1
공약수: 2
공약수: 3
공약수: 6
최대공약수: 6
최소공배수: 330

진법

dNum = int(input('10진수 입력: '))

print('2진수: {}'.format(bin(dNum)))
print('8진수: {}'.format(oct(dNum)))
print('16진수: {}'.format(hex(dNum)))
10진수 입력: 48
2진수: 0b110000
8진수: 0o60
16진수: 0x30

등차수열

inputN1 = int(input('a1 입력: '))
inputD = int(input('공차 입력: '))
inputN = int(input('n 입력: '))

valueN = 0; sumN = 0

# an = a1 + (n-1) * d
valueN = inputN1 + (inputN - 1) * inputD
print('{}번째 항의 값: {}'.format(inputN, valueN))

#sn = n(a1 + an) / 2
sumN = inputN * (inputN1 + valueN) / 2
print('{}번째 항까지의 합: {}'.format(inputN, int(sumN)))
a1 입력: 4
공차 입력: 6
n 입력: 10
10번째 항의 값: 58
10번째 항까지의 합: 310

머리에 쥐가난다..
도대체 수학적 사고 능력은 언제 장착되는걸까
나만 이렇게 어려워 하는건 아닐까 조바심이 나고 걱정이 된다.

등비수열

inputN1 = int(input('a1 입력: '))
inputR = int(input('공비 입력: '))
inputN = int(input('n 입력: '))

valueN = 0; sumN = 0

#an = a1 * r^(n-1)
valueN = inputN1 * (inputR ** (inputN -1))
print('{}번째 항의 값: {}'.format(inputN, valueN))

#sn = a1 * (1 - r^n) / (1-r)
sumN = inputN1 * (1 - (inputR ** inputN)) / ( 1 - inputR)
print('{}번째 항까지의 합: {}'.format(inputN, int(sumN)))
a1 입력: 2
공비 입력: 3
n 입력: 5
5번째 항의 값: 162
5번째 항까지의 합: 242

💡 자료구조

셋트에는 중복 값이 허용되지 않는다!
튜플의 값은 바꿀 수 없다.

bts1 = '김남준'
bts2 = '김석진'
bts3 = '정호석'
bts4 = '민윤기'
bts5 = '박지민'
bts6 = '김태형'
bts7 = '전정국'

bts = ['김남준', '김석진', '정호석', '민윤기', '박지민', '김태형', '전정국']
print(bts)
print(type(bts))

bts = ('김남준', '김석진', '정호석', '민윤기', '박지민', '김태형', '전정국')
print(bts)
print(type(bts))

scores = {'mbc':100, 'kbs':97, 'sbs':99}
print(scores)
print(type(scores))

allSales = {100, 200, 500, 200}
print(allSales)
print(type(allSales))
['김남준', '김석진', '정호석', '민윤기', '박지민', '김태형', '전정국']
<class 'list'>
('김남준', '김석진', '정호석', '민윤기', '박지민', '김태형', '전정국')
<class 'tuple'>
{'mbc': 100, 'kbs': 97, 'sbs': 99}
<class 'dict'>
{200, 100, 500}  <= 중복된 값은 빼고 보여줌
<class 'set'>

리스트 안에 또 다른 리스트가 들어갈 수도 있다! ✅

인덱스는 1번이 아니라 0번부터 시작한다.

인덱스를 이용해서 해당 아이템의 위치로 접근할 수 있다.
보라돌이 뚜비 나나
[0] ------[1]----[2]--[3] 순서이기 때문에 4번은 없다.

length 함수

str = 'Soon to be Data scientist!!'
print(len(str))  # 27
bangtans = ['김남준', '김석진', '정호석', '민윤기', '박지민', '김태형', '전정국']
bLength = len(bangtans)

for i in range(len(bangtans)):
    print(bangtans[i])
김남준
김석진
정호석
민윤기
박지민
김태형
전정국

리스트와 for문

두가지 for문을 구현할 수 있다.

dogs = ['말티즈', '포메라니안', '시바견', '허스키', '리트리버']

for i in range(len(dogs)):
    print(dogs[i])
    
for dog in dogs:
    print(dog)
    
// 결과는 똑같이 나온다
말티즈
포메라니안
시바견
허스키
리트리버

리스트와 while문

dogs = ['말티즈', '포메라니안', '시바견', '허스키', '리트리버']

n = 0
flag = True
while flag:
    print(dogs[n])
    n += 1

    if n ==len(dogs):
        break
        
// 결과는 똑같이 나온다
말티즈
포메라니안
시바견
허스키
리트리버

enumerate 함수

for idx, value in enumerate(dogs):
    print('{}: {}'.format(idx, value))
    
// 결과 
0: 말티즈
1: 포메라니안
2: 시바견
3: 허스키
4: 리트리버

str = ' I love my dog'
for idx, value in enumerate(str):
    print('{}: {}'.format(idx, value))
    
// 결과
0: I
1:  
2: l
3: o
4: v
5: e
6:  
7: m
8: y
9:  
10: d
11: o
12: g

오늘 공부를 마치며...

오늘은 광복절!! 직장인과 학생들에게 기다리던 빨간날일 것이다.
하지만 제로베이스 수강생들에게는 공부해야하는 여느 날과 다름없다.
그래도 아쉬우니 광복절에 대해 짚어보고 넘어가자면..!
🥳 광복절은 1945년 8월 15일 우리나라가 일본으로부터 광복된 것을 기념하고, 1948년 8월 15일 대한민국 정부수립을 경축하는 날이다.
2023년은 광복 78주년이 되는 해라고 한다!!!

역사를 잊은 민족에게 미래는 없다는 유명한 말이 있듯이, 나도 지금 이렇게 간절히 공부하고 노력하던 때를 잊지 않고 초심을 간직해서 나중에 멋진 데이터 관련 전문가가 되었으면 좋겠다.
일이 힘들고 슬럼프가 느껴질 때 이 글을 읽고 미래의 내가 힘을 얻었으면 좋겠다. 왜냐면 과거의 나(= 현재의 나)는 그 일을 하고 싶어서 지금 내 모든걸 걸고 태워내고 있으니까...!!!!
오늘도 너무 지치고 이해하지 못하는 나 자신이 위축되기도 했지만..
괜찮아. 내일 더 열심히 하자!

그렇지만 지금은... 잠시

profile
아직은 모든게 무섭고 모르는거 투성이지만, 나중엔 멋진 으른이 되야지!

0개의 댓글