본문 바로가기

알고리즘/백준알고리즘

[백준 알고리즘/Python3] 10809 알파벳 찾기

문제

 

문제 이해 

-1이 26개 인 리스트하나

 

a~z까지 리스트하나

 

단어를 담는 리스트하나 

 

3개의 리스트를 가지고 풀었다.

 

 

코드

import string
S = list(input())
li = list(string.ascii_lowercase)

result = [-1]*26

for index,value in enumerate(S):
    for j in range(26):
        if(li[j]==value):
            if(result[j]<0):
                result[j] = index   


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

 

넣은 문자열 리스트 = S

 

a~z까지 문자열 리스트 = li

 

-1을 26개 가지고 있는 리스트 = result

 

 

문자열 리스트에 index와 value를 뽑기위해서 enumerate를 쓰고 for문을 돌린다.

 

a~z까지 문자열을 돌면서 넣은 문자열과 같은게 있다면 

 

그 문자열의 인덱스를 result에 맞는 알파벳 위치에다가 넣는다.

 

중복이 됐을때 무조건 0보다 크니 result의 값들중 0보다 작은 값이 있을때는 실행하지 않는다.

 

 

 

 

 

다른사람의 풀이를 보니

 

 

  • find(찾을문자, 찾기시작할위치) - find는 문자열중에 특정문자를 찾고 위치를 반환해준다, 없을경우 -1을 리턴

 

를 써도 될거같다.

 

 

아니면 

 

from string import ascii_lowercase

input_string=input()
for az in ascii_lowercase:
    
    if az in input_string:
       print(input_string.index(az), end=' ')
    else:
        print(-1 ,end= ' ')

이런식으로 해도 된다.

 

넣은 값의 인덱스를 가져오는 건데

 

a~z까지 돌때 

들어온 값이 a~z리스트에 겹친다면

돌고있는 a~z값을 넣은 문자열의 인덱스로 나타내라 라는 뜻이다.

 

ex)

처음에 a가az에 돌것이다.

그렇면 a'baekjoon'이라는 문자열에 있다.

 

그러면 'baekjoon'의 문자열의 a를 찾아서 그것의 인덱스를 출력하면 1이 나올것이다.

 

az가 o차례가 되면

'baekjoon'의 문자열 o를 찾아서 인덱스를 출력할 것이다. 그러면 5가 나올 것이다.

 

중복이 되어도 a~z까지 1번만 돌기 때문에 o가 2번 나와도 첫 번째 o가 출력이 된다.

문제도 문자의 처음 위치를 출력하라 했다.

 

 

728x90