문제: 알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
result = [-1] * len(string.ascii_lowercase)
알파벳 개수만큼 -1을 반복하여 리스트를 만든다. 즉, 26개의 -1로 초기화된 리스트를 생성함.
for i in range(len(word)):
단어의 길이만큼 반복하면서 각 문자를 순회.
idx = ord(word[i]) - 97
현재 문자의 알파벳 순서(0부터 시작)를 계산한다. 예를 들어, ‘a’는 0, ‘b’는 1이 된다.
if result[idx] == -1:
result[idx] = i
현재 문자가 처음 등장하는 경우에만 result를 업데이트하고 처음 등장하는 위치를 result 리스트에 저장한다.
print(' '.join([str(number) for number in result]))
result 리스트를 문자열로 변환하여 공백으로 구분한 후 출력한다.
import string
def get_idx(word): # 함수 지정
result = [-1] * len(string.ascii_lowercase) # result라는 리스트에 알파벳 숫자 만큼 -1 넣어 주기
for i in range(len(word)): # 단어수만큼 반복함
idx = ord(word[i]) - 97 # I번째 문자를 ascii로 변경하고 -97 빼준다
if result[idx] == -1: # -1이면 리스트 안에 새로운 값을 지정해준다
result[idx] = i # i번째 숫자를 리스트안에 넣음
print(' '.join([str(number) for number in result])) # string으로 변경하고 값 사이에 공간 넣기
get_idx('baekjoon')
이 알고리즘은 입력 단어의 각 문자를 한 번씩 순회하며 처리하기 때문에 O(n)알고리즘이다.