[TIL 2024.07.11] 알고리즘 알파벳 찾기

찬민·2024년 7월 11일

TIL

목록 보기
13/62

오늘 진행한 일들

  • 알고리즘 강의 시청
  • 팀 회의
  • 알고리즘 코드 복습

알파벳 찾기

문제: 알파벳 소문자로만 이루어진 단어 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)알고리즘이다.

0개의 댓글