[백준 10809번-파이썬/Python] 알파벳 찾기
알고리즘 공부/BOJ백준 풀이

[백준 10809번-파이썬/Python] 알파벳 찾기

http://acmicpc.net/problem/10809

{코드}

word = input()
alphabet = dict()
for c in map(chr, range(97, 123)):
	alphabet[c] = -1
for i, c in enumerate(word):
	if alphabet[c] == -1:
		alphabet[c] = i
print(*alphabet.values())

{설명}

이 문제는 딕셔너리 자료형을 쓸 수 있는 전형적인 문제라고 생각합니다.

먼저, 딕셔너리를 알파벳 소문자들을 각각 키(key)로 놓고 모든 키에 대한 값을 -1로 초기화시킵니다.

그 후, 입력받은 문자열을 enumerate함수를 통해 반복문을 돌려 만약 어떤 문자에 대한 딕셔너리 값이 -1이라면 업데이트하고 아니면 무시합니다.

enumerate함수는 이터러블(iterable-문자열, 리스트, 튜플 등)을 넣으면 그 인덱스와 값을 튜플로 반환합니다.

그리고 문제는 처음 등장한 인덱스를 요구하므로 딕셔너리 값이 -1이 아니라면 이미 해당 문자가 전에 있었다는 뜻이므로 무시합니다.

{코드}

print(*map(input().find, map(chr,range(97, 123))))
#위의 코드와 아래의 코드는 같은 방식 입니다.#
word = input()
for i in range(97, 123):
	i = chr(i)
	print(word.find(i))

{설명}

또 다른 방법은 문자열의 find함수와 map함수를 사용하는 것입니다.

find함수는 문자열의 왼쪽에서부터 인자로 넘겨진 문자가 처음 등장하는 인덱스를 반환하고 만약 찾지 못하면 -1을 반환합니다.

*애스터리스크(*)는 언팩 킹 문자로 이터러블을 나눕니다. 이 을 참고해서 한번 찾아보시기 바랍니다.

**chr함수는 어떤 숫자가 들어오면 해당 숫자에 상응하는 유니코드 문자를 반환합니다. 97~123은 알파벳 소문자 a~z입니다.

 

좀 헷갈리는 내용이 많으니 구글에 이 글의 내용들을 검색해가며 자세히 공부해보시기 바랍니다.