오... 오늘은 뭔가 여러가지를 배웠다.
그 중에서도 중요한 부분 및 알아야 할 부분에 대해서 적어야 겠다.
적은적은 없지만
정리를 일부러 안하는 이유는 3가지다.
1. 남들이 보든 말든 사실 관심없다.
2. 검색용이다.
3. 진도의 속도 상 정리하기가 어렵다. 다 끝나면 다른 파이썬 강의 들어야 하고
정리까지하면 실력향상엔 분명한 도움이 되겠지만 그만큼 뭔가에 해롭겠지?
# Sequence
# - <class list>
# - <class tuple>
# 여러개의 데이터를 방을 이용해서 저장하는 자료구조.
# 실제 데이터를 가지고 있어요!
# -<class range>
# 숫자만 해당. 실제 데이터를 가지고 있지 않아요!
# a = range(초기값, 마지막값-1,증가값)
a = range(0,10,1) # 0, 1, 2, 3, 4
print(a)
# list, tuple 같은 경우 1,000,000개의 데이터를 가지고 있으면 실제 메모리양도 데이터 개수만큼 많이 필요
# range은 실제 데이터가 아닌 데이터의 영역(range)에 대한 의미만
# 저장하기 때문에 작은 메모리 공간으로 더 많은 데이터를 표현할 수 있다.
# 일반적으로 아래와 같이 사용
a = range(10) # range(0,10,1)를 생략해서 쓴것이다.
# 많이 사용하는 새로운 연산자 하나만 살펴보아요!
# 어제 했던 여러가지 연산자 => +, -, * ,/ , %, //, == ,is
# in 안에 있나요? => 불린 (논리연산자)
#####################################################################
# indexing, slicing
a = range(10,50,1)
print(a[1]) # 11 indexing 가능
print(a[5:10]) # range (15,20) slicing은 원본의 type을 유지
########################################## 이부분은 좀 이해가 안간다.
# 2. Sequence Type
# <class list>
# <class tuple>
# <class range>
# 3. Text Sequence Type
# <class str>
################# 대문자로 바꿔주는 기능
a = "This is a sample text"
result = a.upper()
print(result)
##############################
a = " 이것은 소리없는 아우성 "
# 1. 이 문자열의 전체 길이는 얼마 인가요?
print(len(a))
######################## 몰랐었고, 기억해야하는 것
# 2. 문자열의 앞 뒤 공백을 제거하려면?
print(a.strip())
######################
######## 와...
a = "show me the money"
# 3. 문자열 중 일부분을 다른 문자열로 변경하려면?
# ex) money -> code
a.replace("money","code")
###################
# 4. 문자열의 일부분을 치환하는 방법
##### 다른 format 방식은 쓸줄 안다. 하지만 이 방법은 몰랐다.
num_banana = 20
num_apple = 7
a = "나는 바나나를 {}개 가지고 있고 사과를 {}개 가지고 있어요!"
a.format(num_banana, num_apple)
#########################
# 4. Mapping class
# <class dict>
# dictionary (딕셔너리)
# dictionary를 만들기 위해서 사용하는 class => <class dict>
# literal 로 dictionary를 어떻게 표현하나요?
# list = []
# tuple = ()
# dict => {} list처럼 여러개의 자료구조를 담을 수 있다. != format의 {}
# {}를 이용하고 키와 value의 쌍을 저장하는 집합 자료 구조.
# 순서가 존재하지 않아요.
# 그러면 어떻게 여러개의 데이터를 저장하나요?
##############################Mapping type의 Dictionary
#딕셔너리 안에서 :의 의미는 키와 벨류를 구분해주는것
# a={
# 'name' : '홍길동',
# 'age' : 20 ,
# 'addr' : '서울'
# }
# # 위의 것을 a={name" : "홍길동","age" : 20 "addr" : "서울"}
# #이렇게 한줄로 만들어도 상관은 없다. 가독성을 위해서 분할 해놓은것이다.
# print(a)
# print(type(a))
# # 추가적으로 데이터를 저장하려면?
# a["mobile"] = "01033334444"
# print(a)
# # 값을 수정하려면?
# a ["age"] = 30
# print(a)
#################################################################
# a = {
# "name" : "아이유",
# "age" :20,
# "age" : 30,
# # 동일한 키값을 사용 할 경우, 가장 나중의 것으로 사용되고 먼저있는것은 사라진다.
# }
# print(a)
# a[10]= "서울"
# print(a)
# # 이처럼 항상 키값이 문자일 필요는 없다.
##################################################
#하지만
a = {
"name" : "홍길동",
("address"): "서울"
# Tuple은 사용가능하다. 왜냐하면 key 값으로는 변동이 없어야 key로써의 역할이 가능한데, list는 변동이 가능하고 Tuple은 아니기 때문이다.
}
# dictionary 자체가 key값을 얻어야 Value 값을 얻을 수 있는 구조이다.
# 모든 key 값을 언어내는 기능(함수)
print(a.keys()) # dict_keys(['name', 'address'])
#['name', 'address']
# 이거는 리스트처럼 생겼고, 리스트와 같은 기능으로 사용할 수 있지만, 리스트는 아니다.
# 모든 Value 값을 언어내는 기능(함수)
print(a.values())
# 모든 key와 value를 얻어내는 기능(메소드)
print(a.items())
a.clear() # dictionary 안의 모든 key, value를 모두 삭제한다.
print(a) # {}
# # Python built-in Data Type
# #1. Numeric Type
# int
# float
# 2. Sequence Type
# list
# tuple
# range
# # 3. Text Sequence Type
# <class str>
# # 4. Mapping Type
# <class dict>
# # 5. Set type
# <class set>
# 6. Bool Type
#<class bool>
# set은 주머니 개념. (막 담기 때문에 순서개념이 없다.)
# 여러개의 데이터를 저장할 수 있는 집합 자료구조
# 순서가 없다.
# 키의 개념이 없다. (연상해봐라 주머니에 갖은 물건들을 넣을때 일일이 키를 붙여서 넣는지 때문에 값만 저장한다.)
# # set안에서는 중복을 허용하지 않는다 (이게 set의 가장 큰 특징이다.)
# # leteral -> {} ( dictionary와 set은 둘다 {}를 사용)
# a = {"홍길동", "아이유", 20, "아이유", "홍길동"} #{'아이유', '홍길동', 20} 이처럼 중복으로 된 건 버려진다.
# print(a)
# a = set([1,2,3,4,4,4,4,4,4,]) # list(Tuple)을 이용해서 set을 만들 수 있다.
# print(a)
# set 의 연산 -> 합집합(Union), 교집합(intersetion), 차집합(difference)
# a = set([1,2,3,4,5])
# b = set([3,4,5,6,7])
# # 합집합(Union)
# result = a|b
# print(result) #{1, 2, 3, 4, 5, 6, 7}
# #교집합(intersetion)
# result = a&b
# print(result) #{3, 4, 5}
# #차집합(difference)
# result = a-b
# print(result)
a = {1,2,3}
a.add(6) #{1, 2, 3, 6}
print(a)
a.add("안녕") #{1, 2, 3, 6, '안녕'}
print(a)
a.add((45,)) #{1, 2, 3, 6, '안녕', (45,)} (Tuple을 add 시켰다는 걸 알아야한다.)
print(a)
# a.add([1,2,3,4]) #Error! list 를 넣으려고하면 에러가 난다.
# print(a)
# a.add({"name":"홍길동"}) #Error!
# a.add({6,7,8}) a.add({6,7,8})
# a = {1,2,3} # add는 1개만 추가, update는 여러개 추가
# a.update([6,7,8]) # list도 되는것같다 add와는 다르게
# print(a)
# a.remove(2)
# print(a)
# 6. Boolyen
# 기억해야할 사항
# 다음의 값들은 모두 False로 간주됨.
# 빈 문자열 ('') empty string -> False
# print(bool(''and True)) #False
# [], (), {}, 숫자 0
# control statement(제어문)
# if
# 조건에 따라서 어떻게 수행할지 사용.
# #for
# 내가 원하는 범위내에서 반복하고 싶을때
# #while
# 얼마나 출력을 해줄지
# 제어문 - if
# 논리값을 기반으로 실행코드의 분기를 시키는 제어문
# if 논리값(논리연산의 값) (논리연산)
if 20<39:
print("why")
#for statement (반복문)
a = [1,2,3,4,5]
# for kk in 대부분 리스트,튜플,레인지:|
# break 구문
# 반복문에서 사용되고 break를 만나면가장 가까운 반복문을 탈출.
a =0
while True:
print("aa") # 딱 여기까지는 조건이 무조건 True이기 때문에 코드블럭에서 빠져나올 수가 없다. 무한히.
a = a+1 # 때문에 이것을 넣어준다. 한계치로 점점 가까워지라고
if a == 5:
break
print("호호호")
# 기본, 기반이 되는 능력은 문제해결능력!
# 문제해결을 위해 머리속에서 생각되는 내용을 코드로 표현할 줄 알아야 한다. -> 코딩
# 코딩을 잘하려면 많이 해보는 것 밖에는 없다.
# 6개월 정도 기간을 잡는게 좋다.
# 하루에 적어도 3문제 정도. 자기 수준에 맞게끔
##################################### 아주 중요
# 코딩을 위한 여러 site
# 프로그래머스, 백준, 삼성SW Expert 아카데미.
##################################### 아주 중요
=========
여기서 부터는 문제를 내주셨다.
첫번째 문제가
10보다 작은 수 중에서 3과 5의 배수의 합을 구해라.
였다.
i = 0
total = 0
while i in range(10):
if i % 3 ==0:
total +=i
elif i % 5 == 0:
total +=i
i +=1
print(total)
두번째 문제는 1000보다 작은 수 중에서 3과 5의 배수의 합을 구하는 거였고
이에 range()의 넘버값만 1000으로 바꿔주니 해결되었다.
문제는 세번째 문제였는데
단순 피보나치 수열구하기는 머리로 당장 생각해내기 어렵더라도
구글링하면 나오지 않나?
그래서 좀 배껴가면서 익혀갈 심산이였다. 하지만 조건이 붙었다.
4,000,000 이하의
짝수로 이루어진
피보나치 수열
음.....
아......
지금 3시간 정도 풀고 있는거 같다.
와중에
첫번째 시도 코드는
i = 1
total = 0
while i <= 4000000:
if i % 2 ==0:
total = i+ total
i+=1
print(total)
두번째 시도 코드는
로딩이 걸려서 도무지 언제 끝날지 감이 안잡혔다.
front_number = 0
back_even_number = 1
for i in range(4000001):
if (front_number + back_even_number) % 2 == 0:
front_number = front_number + back_even_number
back_even_number = front_number + back_even_number
else:
front_number += 1
print(back_even_number)
세번째 코드를 쓰기전의 문제를 다시 떠올리게 되었다.
"아.. 반복을 400만"번" 하는게 아니라, 400만 이하의 "숫자"니깐 다르겠구나"
세번째 코드는
front_number = 0
back_even_number = 1
while back_even_number<4000001:
if (front_number + back_even_number) % 2 == 0:
front_number = front_number + back_even_number
back_even_number = front_number + back_even_number
else:
front_number += 1
print(back_even_number)
음.. 하지만 이것도 틀렸다고 하신다.
네번째 코드로
front_number = 0
back_number = 1
total_even_number = 0
while back_number<4000001:
front_number = front_number + back_number
back_number = front_number + back_number
if back_number % 2 == 0:
total_even_number += back_number
print(total_even_number)
라고 말씀드렸다.
선생님도 지치셨는지 아예 답을 알려주셨다.
사실 답을 알려주시는게 가장 합리적이지 ㅇㅇㅇ
왜냐하면 답을 안다고해서 코드를 알 수 있는건 아니지만
답이 맞을 때 까지 최소한에 스스로 검증해 볼 수 있으니깐
답은 4613732
라고 하셨다.
음.... 피보나치 수열 표를 보니 피보나치 수열 자체는 맞다.
근데 음... 뭐야 뭐가 문제야
하... 결국엔 total넘버에 front 넘버를 안넣어서 안맞는거였다.
아무튼 와... 이걸 해낼 수 있었다는 것 자체가 뿌듯하다. ㅇㅇㅇ
front_number = 0
back_number = 1
total_even_number = 0
while back_number<4000001:
front_number = front_number + back_number
back_number = front_number + back_number
if back_number % 2 == 0:
total_even_number += back_number
elif front_number % 2 == 0:
total_even_number += front_number
print(total_even_number)
이게 정답코드!!!!!!
아직은! 괜찮다
앞으로도 괜찮고 싶다. 알고리즘 문제를 푸는것을 게을리 하지 말자.
'개발일지 > 멀티캠퍼스 프로젝트형 AI 국비지원' 카테고리의 다른 글
2022.01.25 Day-7 멀티캠퍼스 Mysql (0) | 2022.01.25 |
---|---|
20220.01.21 Day-5 멀티캠퍼스 광탈 시작 (0) | 2022.01.21 |
2022.01.19 멀티캠퍼스 Day-3 후기 (0) | 2022.01.19 |
2022.01.18 Day-2 멀티캠퍼스 본강의 (환경설정 및 설치등) (0) | 2022.01.18 |
2022.01.16 멀티캠퍼스 프로젝트형 AI 시작 하루전 (0) | 2022.01.16 |