알고리즘 강의 - 강창민 튜터님
프로그래밍 본질
쉽고 빠르고 간결하게 주어진 문제를 해결하느냐
중요한 소양
자기객관화
1 2 3 4 5 6
이중 for문 왜쓰는가?
phase1 1이 대조군이 될때 , 비교군(대조군 포함)과 비교
phase2 2이 대조군이 될때, 비교군(대조군 포함)과 비교
... 6까지
phase1개만 비교할때는 for문 사용하면 되지만
6개의 phase를 모두 비교하기 위해 이중for문 사용한다
def find_max_occurred_alphabet(string):
alphabet_occurrence_array = [0] * 26 ## 0으로 채워진 26칸짜리 배열 (빈배열)
for char in string: ## char를 매개변수 string에 반복
if not char.isalpha(): ## char가 알파벳 이라면 ( if not 거르는거 )
continue ## 계속진행해라
arr_index = ord(char) - ord('a')
## arr_index는 (char의 아스키코드 - a의 아스키코드)
alphabet_occurrence_array[arr_index] += 1
##빈 배열의 arr_index번째의 자리에 1을더함
max_occurrence = 0 ## 최대빈도 빈칸
max_alphabet_index = 0 ## 최대빈도알파벳 빈칸
for index in range(len(alphabet_occurrence_array)):
## 인덱스를 반복한다 , alphabet_occurrence_array의 길이만큼
alphabet_occurrence = alphabet_occurrence_array[index]
## 특정 알파벳 빈도는 = alphabet_occurrence_array의 인덱스 번째
if alphabet_occurrence > max_occurrence:
## 특정 알파벳 빈도가 최대알파벳 빈도보다 크다면
max_occurrence = alphabet_occurrence
## 이 알파벳 빈도값은 최대빈도값이되고
max_alphabet_index = index
## 인덱스 값(최대빈도값의 인덱스번호) 은 최대빈도 알파벳의 인덱스번호가 된다
return chr(max_alphabet_index + ord('a'))
## 리턴한다 chr() 함수로 이값을 (최대빈도 알파벳 인덱스 번호 + a의 아스키코드 = 특정 알파벳의 아스키코드가 됨)
## chr() 함수에 아스키코드번호 넣으면 실제문자로 변환해준다
result = find_max_occurred_alphabet
## 결과 = chr() 함수로 얻은 실제문자
print("정답 = a 현재 풀이 값 =", result("Hello my name is sparta"))
print("정답 = a 현재 풀이 값 =", result("Sparta coding club"))
print("정답 = s 현재 풀이 값 =", result("best of best sparta"))
파이썬 기초 ( 몰랏던거 위주)
사칙연산 외에
a//b # 3 (몫)
a%b # 1 (나머지)
a**b # 49 (거듭제곱)
Bool 자료형
a = 4 > 2 # True
not a # False NOT 연산자로 참을 거짓으로, 거짓을 참으로 바꿔준다.
a and b # False AND 연산자로 모두 참이어야 참을 반환한다.
a or b # True OR 연산자로 둘 중 하나만 참이면 참이다.
str( ) - 숫자를 문자열로 바꿔줌
len( ) - 문자열의 길이를 구해줌
특정 자료형 뒤에 .을 붙이고 쓰는 내장 함수들을 '메소드(method)'라고 합니다
.upper() 대문자로
.lower() 소문자로
.split('@') @기준 잘라서 리스트형으로
.replace('-', '>') 텍스트내용중 - 를 > 로 바꿈
인덱싱
문자열을 일부를 따로 떼어 부르는 방법 , 0부터 센다
f="abcdefghijklmnopqrstuvwxyz"
f[1] # b 파이썬은 숫자를 0부터 셉니다
f[4:15] # efghijklmno f[4]부터 f[15] 전까지, 총 15-4=11개!
f[8:] # ijklmnopqrstuvwxyz f[8]부터 끝까지, 앞의 8개 빼고!
f[:7] # abcdefg 시작부터 f[7] 전까지, 앞의 7개!
f[:] # abcdefghijklmnopqrstuvwxyz 처음부터 끝까지
a = [1, 2, 3]
a.append(5)
print(a) # [1, 2, 3, 5]
a.append([1, 2])
print(a) # [1, 2, 3, 5, [1, 2]]
# 더하기 연산과 비교!
a += [2, 7]
print(a) # [1, 2, 3, 5, [1, 2], 2, 7]
a = [2, 5, 3]
a.sort() ## 내림차순
print(a) # [2, 3, 5]
a.sort(reverse=True) ## 오름차순
print(a) # [5, 3, 2]
a = [2, 1, 4, "2", 6]
print(1 in a) # True
print("1" in a) # False
print(0 not in a) # True
키(key)와 밸류(value)의 쌍으로 이루어진 자료의 모임,
딕셔너리의 요소에는 순서가 없기 때문에 인덱싱을 사용할 수 없어요. 에러남 (리스트랑 다른점)
person = {"name":"Bob", "age": 21}
print(person["name"])
Bob
빈 딕셔너리 만들기
a = {}
a = dict()
딕셔너리의 값을 업데이트하거나 새로운 쌍의 자료를 넣을 수 있습니다.
person = {"name":"Bob", "age": 21}
person["name"] = "Robert"
print(person) # {'name': 'Robert', 'age': 21}
person["height"] = 174.8
print(person) # {'name': 'Robert', 'age': 21, 'height': 174.8}
딕셔너리 안에 해당 키가 존재하는지 알고 싶을 때는 in을 사용합니다.
person = {"name":"Bob", "age": 21}
print("name" in person) # True
print("email" in person) # False
print("phone" not in person) # True
요소에 딕셔너리 넣을수 있다
person = {"name":"Alice", "age": 16, "scores": {"math": 81, "science": 92, "Korean": 84}}
print(person["scores"]) # {'math': 81, 'science': 92, 'Korean': 84}
print(person["scores"]["science"]) # 92
리스트와 조합해서 사용할수 있다
people = [{'name': 'bob', 'age': 20}, {'name': 'carry', 'age': 38}]
# people[0]['name']의 값은? 'bob' ## 리스트이기 때문에 인덱싱 가능함
# people[1]['name']의 값은? 'carry'
person = {'name': 'john', 'age': 7}
people.append(person)
# people의 값은? [{'name':'bob','age':20}, {'name':'carry','age':38}, {'name':'john','age':7}]
# people[2]['name']의 값은? 'john'