[T.I.L] 221122 - 알고리즘

권병석·2022년 11월 22일
1

T.I.L (스파르타)

목록 보기
6/22
post-thumbnail

최대값 구하기

1번 방법
주의!!!! 이렇게 쓰면 안됨

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


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


result = find_max_num(input)
print(result)

출력값=
6

2번 방법
이게 위에꺼보다 훨 좋음
for 한번만 쓰잖아

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


def find_max_num(array):
    max_num = array[0]
    for num in array:
        if num > max_num:
            max_num = num

    return max_num


result = find_max_num(input)
print(result)

출력값=
6

어떤 알파벳이 얼마나 많이 써졌는지

def find_alphabet_occurrence_array(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

    return alphabet_occurrence_array


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

출력값=
[3, 0, 0, 0, 2, 0, 0, 1, 1, 0, 0, 2, 2, 1, 1, 1, 0, 1, 2, 1, 0, 0, 0, 0, 1, 0]

input = "hello my name is sparta"


def find_max_occurred_alphabet(string):
    alphabet_array = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
                      "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "z", "y", "z"]

    max_occurrence = 0
    max_alphabet = alphabet_array[0]

    for alphabet in alphabet_array:
        occurrence = 0
        for char in string:
            if char == alphabet:
                occurrence += 1

        if occurrence > max_occurrence:
            max_occurrence = occurrence
            max_alphabet = alphabet


    return max_alphabet


result = find_max_occurred_alphabet(input)
print(result)

출력값=
a

input = "hello my name is sparta"


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)):
        # index 0 -> alphabet_occurrence 3
        alphabet_occurrence = alphabet_occurrence_array[index]

        if alphabet_occurrence > max_occurrence:
            max_alphabet_index = index
            max_occurrence = alphabet_occurrence

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


result = find_max_occurred_alphabet(input)
print(result)

출력값=
a

시간복잡도

for문 반복문이 많으면 많을수록 코드의 복잡도가 올라간다. = 비효율적

for문 이중첩 = N^2
for문 1개 = N

공간복잡도도 있지만, 별로 중요하지 않음
시간복잡도를 제일 우선순위로 고려해야함

빅오 표기법 (최악 경우의수)로 표기하는게 젤 중요함

곱하기 or 더하기

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


def find_max_plus_or_multiply(array):
    multiply_sum = 0
    for number in array:
        if number <= 1 or multiply_sum <=1:
            multiply_sum += number
        else:
            multiply_sum *= number
    return multiply_sum


result = find_max_plus_or_multiply(input)
print(result)

출력값=
728

정수를 입력 했을 때, 그 정수 이하의 소수를 모두 반환하시오

input = 20


def find_prime_list_under_number(number):
    prime_list = []

    for n in range(2, number + 1):
        for i in prime_list:
            if n % i == 0 and i * i <= n:
                break
        else:
            prime_list.append(n)

    return prime_list


result = find_prime_list_under_number(input)
print(result)

출력값=
[2, 3, 5, 7, 11, 13, 17, 19]

0과 1로만 이루어진 문자열이 주어졌을 때, 이 문자를 모두 0, 혹은 모두 1로 같게 만들어야 한다.

할 수 있는 행동은 연속된 하나의 숫자를 잡고 모두 뒤집는 것 이다. 뒤집는 것은 1을 0으로, 0을 1로 바꾸는 것을 의미한다.

주어진 문자열을 모두 0 혹은 모두 1로 같게 만드는 최소 횟수를 반환하시오.

input = "011110"


def find_count_to_turn_out_to_all_zero_or_all_one(string):
    count_to_all_zero = 0
    count_to_all_one = 0

    if string[0] == '0':
        count_to_all_one += 1
    elif string[0] == '1':
        count_to_all_zero += 1

    for i in range(len(string) - 1):
        if string[i] != string[i + 1]:
            if string[i + 1] == '0':
                count_to_all_one += 1
            if string[i + 1] == '1':
                count_to_all_zero += 1

    return min(count_to_all_one, count_to_all_zero)


result = find_count_to_turn_out_to_all_zero_or_all_one(input)
print(result)

출력값=
1

랜덤 번호 맞추기

import random

answer = random.randint(1,100)
count = 0
print("1~100 중 랜덤 숫자 하나를 정하였습니다. 과연 당신이 맞출 수 있을까요?!")

while True:
    count += 1
    guess = int(input('숫자 입력: '))
    if guess > answer:
        print('DOWN')
    elif guess < answer:
        print('UP')
    elif guess == answer:
        print('CORRECT')
        break

print('숫자 입력한 횟수: %d번' % count)
profile
Back-End 개발자를 꿈꾸는 디제이였던 백수의 TIL 일기장 입니다.

1개의 댓글

comment-user-thumbnail
2022년 11월 29일

input = "hello my name is hg"

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)):
    # index 0 -> alphabet_occurrence 3
    alphabet_occurrence = alphabet_occurrence_array[index]

    if alphabet_occurrence > max_occurrence:
        max_alphabet_index = index
        max_occurrence = alphabet_occurrence

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

result = find_max_occurred_alphabet(input)
print(result)

답글 달기