< 백준 10809 >

문제 :

알파벳 소문자로만 이루어진 단어 S가 주어진다.
각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를,

포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.


입력 :

첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않고 알파벳 소문자로만 이뤄져 있다.

출력 :

각 알파벳에 대하여 a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해 출력한다.

만약 어떤 알파벳이 단어에 포함돼 있지 않다면 -1 을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.




















< 내 코드 >

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import string
S = input()
result =[]

for c in string.ascii_lowercase:
    if S.find(c) == -1 : 
        result.append(-1)
    elif S.find(c) != -1 :
        result.append(S.index(c))

for i in result:
    print(i, end =' ')


코드 설명 :

1번 줄에서 import로 string 모듈을 가져온다.

string 모듈은 문자열에 대한 다양한 연산을 도와주는 모듈이다.

string 모듈에는 알파벳 소문자들을 모아놓은 string.ascii_lowercase가 있다.

(더 자세한 내용은 '기므자의 두뇌' 님의 블로그 참고)

string.ascii_lowercase에서 a부터 알파벳 하나씩을 꺼내와 먼저 find( ) 함수로 해당 알파벳이 문자열 S에 있는지 검사한다. 있을 경우 해당 알파벳이 처음 등장하는 위치의 인덱스를, 없을 경우 -1을 돌려준다.

맞긴 맞았는데 좀 더 짧게 할 수 있을 것만 같다..... 나중에 찾아보자.


################

SM은 훨씬 간단히 풀었다. 

1
2
3
4
word = input()
alphabet_list = [l for l in 'abcdefghijklmnopqrstuvwxyz']
for alphabet in alphabet_list:
        print(word.find(alphabet), end =' ')

한 줄로도 가능하다. 와우.


1
print(*map(input().find,map(chr,range(97,123))), sep = ' ')