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)