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입니다.
좀 헷갈리는 내용이 많으니 구글에 이 글의 내용들을 검색해가며 자세히 공부해보시기 바랍니다.
'알고리즘 공부 > BOJ백준 풀이' 카테고리의 다른 글
[백준 1157번-파이썬/Python] 단어공부 (0) | 2020.10.13 |
---|---|
[백준 2675번-파이썬/Python] 문자열 반복 (0) | 2020.10.13 |
[백준 11720번-파이썬/Python] 숫자의 합 (0) | 2020.10.13 |
[백준 11654번-파이썬/Python] 아스키코드 (0) | 2020.10.12 |
[백준 1065번-파이썬/Python] 한수 (0) | 2020.10.10 |