티스토리 뷰

728x90
반응형

문제

 

알파벳 소문자로만 이루어진 단어 S가 주어진다. 

각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 

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

 

입력

 

첫째 줄에 단어 S가 주어진다. 

단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

 

출력

 

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.
만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 

단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.

 

풀이

 

소싯적에 자바로 처음 이 문제를 만났을 때 꽤 고생했던 기억이 있다.

 

대부분의 문제가 그렇듯이 알고나면 별 일 아닌데.

 

머리를 쥐어짜서 일단 -1로 가득찬 리스트를 만들고 순회하면서 숫자를 바꿔주었던 것 같은데

 

이번에는 그냥 for문과 if문을 겹쳐 사용해서 하나의 리스트만 만들고 끝냈다.

 

파이썬에서 리스트 내부의 원소를 체크하는 방법은 굉장히 간단하다.

chr(i) in a

여기서 a가 리스트이다. 위와 같이 입력하면 불 값으로 포함 여부를 알려준다.

 

계속해서 해당 문자가 처음으로 나오는 인덱스는 아래와 같이.

a.index(chr(i))

이어서 답을 보면 아주 짧고 간결해서 마음에 든다.

import sys

a = list(sys.stdin.readline().strip())

b = []

for i in range(26):
    if chr(i + 97) in a:
        b.append(a.index(chr(i + 97)))
    else:
        b.append(-1)

print(*b)
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함