ALGORITHM -2

jenna·2022년 11월 24일
0

ALGORITHM

목록 보기
2/2

연습문제풀이

Q1.왼쪽에서 오른쪽 방향으로 곱하거나 더하는것 중 큰 값으로 누적시키며 곱하거나 더한 값을 구하는 문제

ex) 0 + 3 = 3
	3 * 5 = 15
    15 * 6 = 90
    90 * 1 = 91
    91 * 2 = 182
    182 * 4 = 728
input = [0, 3, 5, 6, 1, 2, 4]


def find_max_plus_or_multiply(array):
    multiply_sum = 0  # 현재 계산하고 있는 합계
    for number in array:  # input으로 들어온 array값을 하나씩 반복을 통해 number라는 변수에 넣어줌
        if number <= 1 or multiply_sum <= 1:
            # (number)숫자를 돌면서 나오는 각 숫자가 1보다 작거나 같으면 더하는게 크고, 1보다 크면 곱한 값이 더 크다
            # multiply_sum도 마찬가지로
            multiply_sum += number
            # ex)첫 반복문 시작에 multiply_sum은 0인데 3을 곱하면 그대로 0이 되버려서
            # multiply도 마찬가지로 1보다 작거나 같으면 더하고, 1보다 크면 곱하는 식으로 코드를 짜야함
        else:
            multiply_sum *= number

    return multiply_sum


result = find_max_plus_or_multiply(input)
print(result)
=> O(N)
1차 반복문이 나왔고, array 의 길이 만큼 반복
(다른 계수는 생략)

Q2. 영어로 되어 있는 문자열이 있을 때, 이 문자열에서 반복되지 않는 첫번째 문자를 반환하시오. 만약 그런 문자가 없다면 _ 를 반환

input = "abadabac"

def find_not_repeating_first_character(string):
    alphabet_occurrence_array = [0] * 26
    # 초기화 된 배열을 만듦 /0이 26개인 배열(리스트)

    for char in string:
        if not char.isalpha():
            # char.isalpha()가 아니라면 알파벳이 아니라면 ;;str.isalpha() 해당 문자열이 알파벳인지 확인 ; 띄여쓰기 때문에 사용
            continue
        arr_index = ord(char) - ord('a')
        #아스키코드로 array index로 변환/ord라는 아스키 변경값을 통해서 array index를 구하고
        alphabet_occurrence_array[arr_index] += 1
        #하나씩 추가해주는 과정/ alphabet_occurrence_array가 다 들어가 있을 것
    not_repeating_character_array = [] #반복되지 않는걸 찾아야함/ 하나만 나온 알파벳을 찾아줘야함
    for index in range(len(alphabet_occurrence_array)): #알파벳 길이 만큼 반복
        alphabet_occurrence = alphabet_occurrence_array[index] #alphabet_occurrence_array에 index 값을 빼서 alphabet_occurrence에 저장
        if alphabet_occurrence == 1:#빈도 수가 만약에 1일 때
            not_repeating_character_array.append(chr(index + ord('a')))
            #빈도 수 가 1인 알파벳을 not_repeating_character_array 변수에 넣어줌
            #index를 다시 알파벳으로 전환 시켜줘야되기 때문에 index가 아닌 chr(index + ord('a')) 사용

    #여기 까지 print(not_repeating_character_array) 해버리면 input에 적은 순서가 아닌
    #alphabet_occurrence_array에 넣은 abc...z 순서로 출력됨 ['c', 'd'] ->이게 답이 아님
    #input에 적은 순서대로 출력되게 하려면 입력한 문자열을 대상으로 반복문을 한번 더 씀
    for char in string:
        if char in not_repeating_character_array:
            #만약에 char가 not_repeating_character_array에 존재한다면 바로 값을 반환해라/ input된 순서대로 반환
            return char
    return "_"


result = find_not_repeating_first_character(input)
print(result)
profile
https://github.com/jennaaaaaaaaa

0개의 댓글