Q. 다음과 같이 영어로 되어 있는 문자열이 있을 때, 이 문자열에서 반복되지 않는 첫번째 문자를 반환하시오. 만약 그런 문자가 없다면 _ 를 반환하시오.
"abadabac"
"aabbcddd"
"aaaaaaa"
input = "abadabac"
def find_not_repeating_first_character(string):
alphabet_list = 0
for alphabet in string:
if alphabet == alphabet_list[array]:
continue
else:
return alphabet
return "_"
result = find_not_repeating_first_character
print(result)
# 반복되지않는 문자를 찾기위해 for문으로 돌려서 하나씩 확인
# 꺼낸 문자를 대조하기 위해 변수 생성 alphabet_list = 0
# for문에서 꺼낸 문자는 alphabet 이라 명명 for alphabet in string:
# 꺼낸 문자 alphabet 과 alphabet_list 의 배열 요소들을 비교해보고 같다면
# 반환하지않고 한번 더 돌리고 continue 같지않다면 return
input = "abadabac"
def find_not_repeating_first_character(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
not_reapeating_character_array = []
for index in range(len(alphabet_occurrence_array)):
alphabet_occurrence = alphabet_occurrence_array[index]
if alphabet_occurrence == 1:
not_reapeating_character_array.append(chr(index + ord("a")))
for char in string:
if char in not_reapeating_character_array:
return char
return "_"
result = find_not_repeating_first_character(input)
print(result)
# 반복되지않는걸 어떻게 찾을까? -> 몇번이 나왔는지를 저장하는 방법을 생각하라
# alphabet_occurrence_array = [0] * 26 는 각 알파벳을 인덱스로 생각을 해서
# 0번째에는 a의 빈도수를, 25번째 인덱스에는 z의 빈도수를 저장해주는 배열
# char가 알파벳이 아니면 버리고 알파벳이라면 arr_index로 변환. 어떻게? 아스키코드
# 4~10 : alphabet_occurrence_array 을 빈도수로 업데이트 하였다.
# 구하고싶은 것은 반복되지않은 알파벳, 하나만 있는 것을 찾아야한다.
# not_reapeating_character_array 변수에 하나만 나오는 char를 넣어야한다.
# 반복을 어떻게 줄 수 있을까? alphabet_occurrence_array, 즉 알파벳의 길이만큼 반복시킨다.
# alphabet_occurrence_array에서 index의 값을 빼서 alphabet_occurrence 로 저장한다.
# a의 빈도, b의 빈도, c의 빈도, ... , z의 빈도까지 alphabet_occurrence에 저장됨
# 만약 alphabet_occurrence 이 1이면 (1번 나왔다는 말) not_repeating_character_array에 해당 알파벳을 넣어주면 됨
# 이 1을 알파벳으로 전환 시킨 후 넣는다! 아스키코드와 append
# 출력해보면 반복되지않는 첫번째 문자인 d 보다 c가 먼저 나오는데 alphabet_occurrence_array를 알파벳 순서대로 정렬했다보니 c, d 순서로 나올 수 밖에 없음.
# d 를 먼저 찾으려면 반복문을 한번 더 ! 입력받은 문자열에서 빼낸 값이 not_reapeating에 있다면 바로 반환하도록