[백준] 10809: 알파벳 찾기 - python[파이썬] (feat. find() vs index())

다인·2024년 7월 30일

백준

목록 보기
18/112
post-thumbnail

1번은 내가 떠올린 코드이고, 분명 다른 방법이 있을 것 같아서 검색해보니 재밌는 아이디어가 있어서 정리해 보았다.

1. 첫 등장 위치 담는 리스트 & 아스키코드 이용

S = input()
nums = [-1] * 26

for i in range(len(S)):
    if nums[ord(S[i])-97] == -1:
        nums[ord(S[i])-97] = i

print(*nums)

2. 알파벳을 담은 문자열 & for문 이용

S = input()
alp = "abcdefghijklmnopqrstuvwxyz"

for i in alp:
    if i in S:
        print(S.index(i), end=' ')
    else:
        print(-1, end=' ')

파이썬은 알파벳의 자리를 찾을 때 이런 식으로 알파벳을 나열한 리스트를 자주 사용하는 것 같다.

3. 알파벳을 담은 문자열 & find 함수 이용 (2번의 더 간단한 버전)

S = input()
alp = "abcdefghijklmnopqrstuvwxyz"

for i in alp:
    print(S.find(i), end=' ')

for문을 직접 작성하지 않고 해당 알파벳이 S에 있으면 바로 출력하도록 find()를 이용했다.
find()는 해당 알파벳이 존재하지 않으면 -1을 반환한다. 하지만, index()는 똑같이 해당 인덱스를 찾아주지만, 존재하지 않는 값을 매개변수로 전달하면 ValueError가 발생하므로 주의해야겠다.
또한, find()는 문자열에서만 사용 가능하여 리스트, 튜플, 딕셔너리 자료형에서 사용 시 에러 발생한다. index()는 문자열, 리스트, 튜플에서 사용 가능해서 딕셔너리 자료형에서 사용 시 에러 발생한다.

결과


아래서부터 1~3번 코드이다. 모두 메모리와 시간이 똑같다!

0개의 댓글