문제
알파벳 소문자로만 이루어진 단어 S가 주어진다.
각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를,
포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
출력
각각의 알파벳에 대해서, a가 처음 등장하는 위치,
b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.
만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다.
단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.
#백준 10809
string = input()
invalue = [-1]*26 #a~z 인덱스 -1로 초기화
alpha = ('a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u',
'v', 'w', 'x', 'y', 'z')
for i in range(len(string)):
p = alpha.index(string[i])
if invalue[p] == -1 :
invalue[p] = i
else:
pass
for i in range(26):
print(invalue[i], end=' ')
리스트 invalue는 a~z에 해당하는 인덱스 0~25를 -1로 초기화합니다.
invalue는 최종적으로 출력에 사용됩니다.
alpha는 0~25의 인덱스에 a~z의 문자를 저장한 튜플입니다.
튜플은 초기화 이후 요소들을 변경하거나 삭제할 수 없습니다.
첫 for문으로 입력된 문자열에서 알파벳의 첫 인덱스의 위치를 저장합니다.
baekjoon을 예시로 i = 0 일 때부터 시작하겠습니다.
string[i]는 string[0]과 같으며 b를 의미합니다.
그러면 alpha.index('b')의 문장이 되며 튜플 alpha에서 b가 저장된 인덱스 1을 p에 저장합니다.
if문으로 들어가겠습니다.
invalue[p]는 invalue[1]과 같습니다. 해당 인덱스의 값은 -1입니다.
-1이라는 것은 아직 입력된 문자열에서 해당 알파벳이 사용되지 않았음을 의미합니다.
그렇기 때문에 첫 알파벳이 등장한 인덱스 i를 저장합니다. (i = 0)
따라서 invalue[1]에 0이 저장되는 결과가 생기며,
이것은 입력된 문자열에서 알파벳 b가 처음 등장한 위치 인덱스는 0이라는 것을 의미합니다.
baekjoon에서 o와 같이 2개 이상의 알파벳이 등장한 경우에는
if 문장에서 걸러지기 때문에 첫 o가 위치한 인덱스 값만을 가집니다.
-끝-
'작업 > Problem Solving' 카테고리의 다른 글
백준 1157(단어 공부) 파이썬(python) 해결 (0) | 2020.08.03 |
---|---|
백준 2675(문자열 반복) 파이썬(python) 해결 (0) | 2020.07.27 |
백준 1065(한수) 파이썬(python) 해결 (0) | 2020.07.26 |
백준 4673(셀프 넘버) 파이썬(python) 해결 (2) | 2020.07.26 |
백준 4344(평균은 넘겠지) 파이썬(python) 해결 (0) | 2020.07.24 |