[백준][python] 10809 알파벳 찾기 ✅
https://www.acmicpc.net/problem/10809
10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출
www.acmicpc.net
풀이 과정
1. 단어를 입력받는다
2. a부터 z까지 리스트를 만들면 귀찮으니까 아스키코드를 이용한다
3. 아스키코드를 문자변환해야 하니까 chr() 함수를 사용하고
- chr(97) = 'a' 이므로 find(chr(97)) = find(chr(a)),
S.find(chr(a))에서 S가 baekjoon을 입력받았을 때 a의 위치는 1 (리스트 위치 세는 방법을 생각해 보면 된다)
4. find를 사용해서 S에서 find로 찾은 인덱스 숫자(위치)를 출력한다
- index가 아니라 find를 사용한 이유는 find는 찾는 문자가 없을 경우 -1을 반환하기 때문
S = input()
alpha = list(range(97,123)) # 아스키코드 97:a ~ 122:z
for i in alpha:
print(S.find(chr(i)))
# chr() : 아스키코드(숫자) -> 문자 변환
# ord() : 문자 -> 아스키코드(숫자)
# find vs index
# find는 문자열에서만 사용 가능, 찾는 문자가 문자열에 없을 경우 -1반환
# index는 반복가능한 자료형 ok, 찾는 문자가 없을 경우 attributerror
리뷰
문제를 이해못해서 다른 사람 코드 참고했는데 예제 입력에서 제시된 단어들의 알파벳이 등장하는 위치를 찾아서 출력하는 문제였다
baekjoon이면 b가 등장하는 위치는 0이므로 a부터 z까지의 리스트가 있을 때 그 리스트에서 첫 번째 위치에 0을 넣고
a가 등장하는 위치는 1, 그러면 리스트에서 0번째에 1을 넣는 방식.
아스키 코드를 배운 적은 있는 데 사용할 일이 없을 줄 알고 대충 보고 넘겼는데 이런 식으로 사용할 수 있다는 것을 깨달았다..!
여전히 파이썬 함수에대해서 익숙하지 않고 아는 것만 사용하다 보니 비슷한 함수들의 차이점도 잘 몰랐는데 find와 index함수의 차이점에 대해 알게 되어 좋은 문제였다