알고리즘

알고리즘 더 풀어보기 (2)

na_o 2021. 8. 17. 20:31
728x90

[반복되지 않는 문자]

다음과 같이 영어로 되어 있는 문자열이 있을 때, 이 문자열에서 반복되지 않는 첫번째 문자를 반환하시오.

만약 그런 문자가 없다면 _ 를 반환하시오.

"abadabac" # 반복되지 않는 문자는 d, c 가 있지만 "첫번째" 문자니까 d를 반환해주면 됩니다!

 

각 알파벳이 각각 몇 개 나왔는지 각각의 값을 가지고 있는 배열을 만들고

1번 나온 알파벳들은 새로운 배열에 저장함

문자열1번나온 알파벳만 들어있는 배열과 비교해서

배열에 들어있는 문자가 문자열에서 나오는 순간 리턴

 

input = "abadabac"


def find_not_repeating_character(string):
    alphabet_occurrence_array = [0] * 26

    for char in string:
        if char.isalpha():
            index = ord(char) - ord('a')
            alphabet_occurrence_array[index] += 1

    not_repeating_character_array = []
    for i in range(len(alphabet_occurrence_array)):
        alphabet_occurrence = alphabet_occurrence_array[i]
        if alphabet_occurrence == 1:
            not_repeating_character_array.append(chr(i + ord('a')))

    for char in string:
        if char in not_repeating_character_array:
            return char
    return "_"


result = find_not_repeating_character(input)
print(result)

 

[시간복잡도]

O(N)

함수 구문 하나하나를 보지 않더라도

1차 반복문이 나왔고 array길이 만큼 반복한다면

O(N)이다 라고 생각하면 됨

다른 계수는 다 버려버려도 됨 영향을 주지 않음

'알고리즘' 카테고리의 다른 글

문자열 뒤집기  (0) 2021.08.18
소수 나열하기  (0) 2021.08.18
알고리즘 더 풀어보기 (1)  (0) 2021.08.17
점근 표기법  (0) 2021.08.15
공간 복잡도 판단하기  (0) 2021.08.13