TIL(22-11-09) 알고리즘 강의 / 파이썬 기초

C one·2022년 11월 9일

알고리즘 강의 - 강창민 튜터님

코딩테스트

  • 인풋값 -> 프로세싱 해서 (재료 : 자료구조/ 레시피 : 알고리즘) -> 아웃풋
  • 실행속도 보는 회사도 있다 - 파이썬은 불이익 없을 것
    성능평가 테스트 케이스도 있다 - 몇만건의 데이터를 넣어서 테스트
    짧은코드길이 (숏코딩) -> 나의 시간적게걸림 / 제한시간 빡세다 -> 파이썬이 유리하다
  • 프로그래밍 본질
    쉽고 빠르고 간결하게 주어진 문제를 해결하느냐

  • 중요한 소양
    자기객관화


1 2 3 4 5 6

이중 for문 왜쓰는가?

phase1 1이 대조군이 될때 , 비교군(대조군 포함)과 비교
phase2 2이 대조군이 될때, 비교군(대조군 포함)과 비교
... 6까지

phase1개만 비교할때는 for문 사용하면 되지만
6개의 phase를 모두 비교하기 위해 이중for문 사용한다

  • 알고리즘
    자주쓰는 라이브러리 펑션 암기해라..

  • 알고리즘과 친해지기 (2), 최빈값 찾기
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'
profile
🌽

0개의 댓글