내배캠 9일차

·2022년 11월 22일
0

내일배움캠프

목록 보기
8/142
post-thumbnail

자바스크립트도 강의 다 봤는데, 벨로그에 쓴 내용 복습이라 따로 적지는 않겠다.
최빈값구하는 코드에서 1시간 동안 절절매다가 드디어 풀었다.
원래 빈도수구하기 코드를 이용하려고 했는데 아스키코드를 다시 숫자로 변환하는 코드를 몰라서 그냥 코드를 새로 짜게 되었는데, 진짜 구글링하면 될 것을 일을 크게 만든것같다.
중간중간 그냥 코드보고 강의진도나 나갈까 엄청 고민했는데 풀어서 그래도 너무 기쁘다ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

for문 return

input = [3, 5, 6, 1, 2, 4]


def is_number_exist(number, array):
    for i in array:
        if number == i:
            return True

    return False

result = is_number_exist(3, input)
print(result)

for ~ else 문

python 의 for ~ else 문은 “for문에서 break가 발생하지 않았을 경우”의 동작을 else문에 적어주는 것

def find_max_num(array):
    for num in array:
        for compare_num in array:
            if num < compare_num:
                break
        else:
            return num

빈도수구하기

def find_alphabet_occurrence_array(string):
    alphabet_occurrence_array = [0] * 26

    for str in string:
        if str.isalpha():
            alphabet_occurrence_array[ord(str) - ord('a')] += 1
        else:
            continue
    return alphabet_occurrence_array



print(find_alphabet_occurrence_array("hello my name is sparta"))

최빈값구하기(내거)

input = "hello my name is sparta"

def find_max_occurred_alphabet(string):
    alphabet_array = []

    for i in string:
        if i.isalpha():
            if i in alphabet_array:
                continue
            else:
                alphabet_array.append(i)
        else:
            continue
    return alphabet_array

    max_alphabet = alphabet_array[0]
    max_count = 0

    for alpha in alphabet_array:
        count = 0
        for j in string:
            if alpha == j:
                count += 1
            else:
                continue
            if max_count < count:
                max_count = count
                max_alphabet = j
            else:
                continue

    return max_alphabet, max_count



result = find_max_occurred_alphabet(input)
print(result)

최빈값구하기(아스키코드)

def find_max_occurred_alphabet(string):
    alphabet_occurrence_array = [0] * 26

    for char in string:
        if not char.isalpha():
            continue
        arr_index = ord(char) - ord('a')
        alphabet_occurrence_array[arr_index] += 1

    max_occurrence = 0
    max_alphabet_index = 0
    for index in range(len(alphabet_occurrence_array)):
        alphabet_occurrence = alphabet_occurrence_array[index]
        if alphabet_occurrence > max_occurrence:
            max_occurrence = alphabet_occurrence
            max_alphabet_index = index

    return chr(max_alphabet_index + ord('a'))

-아스키코드로 변환 : ord
-다시 문자로 변환 : chr

시간복잡도

:입력값과 문제를 해결하는 데 걸리는 시간과의 상관관계.
만약 입력값이 2배로 늘어났을 경우 처리하는데 걸리는 시간은 몇배로 늘어나는지가 관건.
사용자는 시간이 적게 걸리는 코드를 선호함으로 입력값이 늘어나더라도 걸리는 시간이 덜 늘어나는 코드가 좋은 코드임~!
=> 각 줄이 실행되는걸 1번의 연산
=> 상수는 신경쓰지말고, 입력값에 비례해서 어느 정도로 증가하는지만 파악
=> 즉, 2N+1의 연산량이 나온 첫번째 풀이 방법은 N만큼의 연산량이 필요.

공간복잡도

: 입력값과 문제를 해결하는 데 걸리는 공간과의 상관관계
=> 시간 복잡도와 유사, 관점만 시간이 아닌 공간
=> 저장하는 데이터의 양이 1개의 공간
=> 공간복잡도 보다는 시간복잡도를 중점으로 봐야함

점근표기법

: 알고리즘의 성능을 수학적으로 표기하는 방법
=> 알고리즘의 “효율성”을 평가하는 방법
=> 지금까지 '이 함수는 N 정도의 시간과 공간이 걸리겠구나' 하면서 분석했던 게 점근 표기법의 일종
=>빅오(Big-O)표기법, 빅 오메가(Big-Ω) 표기법 2가지
: 빅오 표기법은 최악의 성능이 나올 때 어느 정도의 연산량이 걸릴것인지,
빅오메가 표기법은 최선의 성능이 나올 때 어느 정도의 연산량이 걸릴것인지에 대해 표기합니다.
=> 좋을때가 1이고 안좋을때가 N이면,
빅오 표기법으로 표시하면 O(N)O(N), 빅 오메가 표기법으로 표시하면 Ω(1)Ω(1) 의 시간복잡도를 가진 알고리즘
=>대부분의 입력값이 최선의 경우일 가능성은 매우 적고, 우리는 가장 최악의 경우를 대비해야 하기 때문에 거의 빅오표기법으로 분석함.

#multiply or add

input = [0, 3, 5, 6, 1, 2, 4]

def find_max_plus_or_multiply(array):
    count = 0
    for i in array:
        if i > 1:
            if count > 1:
                count *= i
            else:
                count += i
        else:
            count += i

    return count

result = find_max_plus_or_multiply(input)
print(result)

# def find_max_plus_or_multiply(array):
#     count = 0
#     for i in array:
#         if i > 1 or count > 1: #반대로하면 문제없음
#             count *= i
#         else:
#             count += i
#
#     return count
profile
개발자 꿈나무

0개의 댓글