문제 링크
https://www.geeksforgeeks.org/dsa/given-a-string-find-its-first-non-repeating-character/
문제
Q. 다음과 같이 영어로 되어 있는 문자열이 있을 때,
이 문자열에서 반복되지 않는 첫번째 문자를 반환하시오.
만약 그런 문자가 없다면 _ 를 반환하시오.
input = "abadabac"
def find_not_repeating_first_character(string):
# 이 부분을 채워보세요!
return "_"
result = find_not_repeating_first_character
print("정답 = d 현재 풀이 값 =", result("abadabac"))
print("정답 = c 현재 풀이 값 =", result("aabbcddd"))
print("정답 =_ 현재 풀이 값 =", result("aaaaaaaa"))
정답 풀이
input = "abadabac"
def find_not_repeating_first_character(string):
for i in range(len(string)):
is_unique = True
for j in range(len(string)):
if i != j and string[i] == string[j]:
is_unique = False
break
if is_unique:
return string[i]
return "_"
result = find_not_repeating_first_character
print("정답 = d 현재 풀이 값 =", result("abadabac"))
print("정답 = c 현재 풀이 값 =", result("aabbcddd"))
print("정답 =_ 현재 풀이 값 =", result("aaaaaaaa"))
input = "abadabac"
def find_not_repeating_first_character(string):
alphabet_occurence_array = [0] * 26
for char in string:
if not char.isalpha():
continue
arr_index = ord(char) - ord('a')
alphabet_occurence_array[arr_index] += 1
not_repeating_character_array = []
for index in range(len(alphabet_occurence_array)):
alphabet_occurrence = alphabet_occurence_array[index]
if alphabet_occurrence == 1:
not_repeating_character_array.append(chr(ord('a') + index))
for char in string:
if char in not_repeating_character_array:
return char
return "_"
result = find_not_repeating_first_character
print("정답 = d 현재 풀이 값 =", result("abadabac"))
print("정답 = c 현재 풀이 값 =", result("aabbcddd"))
print("정답 =_ 현재 풀이 값 =", result("aaaaaaaa"))
문제를 풀고 알게 된 개념 및 소감
- 첫번째 풀이의 경우 flag 변수를 사용할 생각을 못했던 것 같다.
- 두번째 풀이의 경우 반복되는지 아닌지를 확인하기 위해, 알파벳 별로 출현하는 횟수를 저장한다. 배열에 빈도수를 저장하고, 배열을 돌면서 반복되지 않는 문자를 집어 넣는다. 그리고 string 을 돌면서 첫번째 반복되지 않는 문자를 찾아 반환하면 된다.
'백준' 카테고리의 다른 글
| [알고리즘] - 회문 검사 / 파이썬 (0) | 2025.09.02 |
|---|---|
| [알고리즘] - 링크드리스트 합 계산 (1) | 2025.08.28 |
| [백준] - 문자열 뒤집기(1439)/파이썬 (1) | 2025.08.25 |
| [백준] - 소수 나열하기(1929)/파이썬 (0) | 2025.08.25 |
| [알고리즘] - 곱하기 or 더하기 (0) | 2025.08.24 |