문제
문제 이해
-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
'알고리즘 > 백준알고리즘' 카테고리의 다른 글
[백준 알고리즘/Python3] 5622 다이얼 (0) | 2021.08.30 |
---|---|
[백준 알고리즘/Python3] 1157 단어 공부 (1) | 2021.08.27 |
[백준 알고리즘/Python3] 1065 한수 (0) | 2021.08.23 |
[백준 알고리즘/Python3] 4673 셀프 넘버 (0) | 2021.08.22 |
[백준 알고리즘/Python3] 2884 알람시계 (0) | 2021.07.20 |