문제
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
출력
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.
만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.
예제 입력 1
baekjoon
예제 출력 1
1 0 -1 -1 2 -1 -1 -1 -1 4 3 -1 -1 7 5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
import로 불러와 사용할 수 있고,
from string import ascii_lowercase
L = list(ascii_lowercase)
s = input()
for i in range(len(L)):
print(s.find(L[i]), end = " ")
직접 입력하여 쓸 수도 있다.
# 문자열 입력
s = list(map(str, input()))
# 알파벳 리스트
alpha = list('abcdefghijklmnopqrstuvwxyz')
# 알파벳 길이만큼 array에 -1
array = [-1 for i in range(len(alpha))]
for i in range(len(s)):
# 알파벳 리스트의 인덱스와 문자열 인덱스가 같으면 i
if array[alpha.index(s[i])] == -1:
array[alpha.index(s[i])] = i
for j in array:
print(j, end=" ")
알았던 내용
몰랐던 내용
find 함수를 사용해서 출력하는 방법이다. 가령, print('abcd efg'.find(a)) # 0 출력되는 원리이다. 만약, -1을 출력하고 싶다면 없는 수를 입력하면된다 print('abcd efg'.find(z)) # - 1
또 [-1 for i in range(len(alpha))]의 쓰임도 알지 못하여, 이번 코드를 아예 이해하지 못했다고 볼 수 있다.
if 다음 -1, i 처리하는 방법에 대해서도 -1만 나왔던 나의 코드와는 달리, else: 가 아닌 바로 아래 if 라는 특정 조건 부분만 충족 시
출력하는 구문을 활용했으면 해결이 가능한 부분이었다.
배운 내용
내가 만들어둔 리스트 안에 입력 값이 존재하는지 여부, 나아가 그 인덱스까지 출력할 수 있게 컨트롤 가능한 부분이다.
이후 입력 값 나머지 부분에 대해 처리하는 것이 있을 땐 이것을 활용하면 좋을 것으로 보인다.