level 0. 반복되지 않는 문자

reggias·2022년 11월 23일
0

문제

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에 있다면 바로 반환하도록

배운 점

  • index in range(len()) 에서 index는 alphabet_occurrence_array의 요소 값인 [4, 2, 1, 1, 0, 0, ... , 0] 를 말하는줄알았는데 알고보니 진짜 인덱스를 말하는거였다. 0 ~ 25 값
profile
sparkle

0개의 댓글