[ 백준 문제 10809 / 파이썬 ] 알파벳 찾기

2023. 2. 9. 19:31백준/파이썬

 

10809번: 알파벳 찾기

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

www.acmicpc.net

알파벳 소문자로만 이루어진 단어 S가 주어진다.
각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는
처음 등장하는 위치를,
포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.

 

아스키 코드 반환
ord(문자)

문자 => 숫자
아스키 코드를 반환해줍니다.

print(ord("A"))
=> 65

chr(숫자)
숫자 => 문자
숫자에 맞는 아스키 코드를 반환합니다.

print(chr(65))
=> A

 

인덱스, 위치를 찾아주는 함수
변수.find(찾을 문자)
변수.index(찾을 문자)

 

 

정답 1) find() 이용

S = input()

for i in range(ord('a'), ord('z')+1):
    if chr(i) in S:
        print(S.find(chr(i)), end = ' ')
    else:
        print("-1", end = ' ')
baekjoon
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 

정답 2) index() 이용

S = input()

for i in range(ord('a'), ord('z')+1):
    if chr(i) in S:
        print(S.index(chr(i)), end = ' ')
    else:
        print("-1", end = ' ')
baekjoon
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 

 

그런데 잠깐! find()와 index()의 차이는 뭘까요?

 

find(), index() 차이점

find()
찾는 문자가 없는 경우에 -1을 출력합니다.

index()
찾는 문자가 없는 경우에 Value에러가 발생합니다.

 

이 특징을 이용하면 이 문제에서

find()를 쓰면 if문을 쓸 필요가 없다는 사실을 알 수 있습니다.

 

index() 이용 => 에러 발생

S = input()

for i in range(ord('a'), ord('z')+1):
    print(S.index(chr(i)), end = ' ')

 

정답 3) find() 이용

S = input()

for i in range(ord('a'), ord('z')+1):
    print(S.find(chr(i)), end = ' ')