10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출
www.acmicpc.net
문제
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
출력
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.
만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.

💻 코드 및 해설
import sys
input = sys.stdin.readline
S = input().strip() # 문자열 입력
result = [-1] * 26 # 결과를 저장할 배열, 기본값으로 -1 저장
for i, char in enumerate(S):
if(result[ord(char) - 97] == -1): # 맨 앞의 값을 저장해야 하므로 이미 값이 바뀌어있으면 바꾸지 않음
result[ord(char) - 97] = i; # 결과 배열의 아스키코드를 이용해 해당 인덱스를 구하고, 그 값이 i 번째 있음을 저장
print(*result, sep=" ")
- S 배열에 문자열을 입력, result 리스트에 기본값으로 -1 값 26개 (알파벳 개수) 저장
- for 문을 돌면서
- ord(char) - 97 : 현재 문자의 아스키코드에서 97을 뺀 값을 인덱스로 활용 => a는 0, b는 1, c는 2 ... z는 26
- result[ord(char) - 97]이 -1이라면 기본값(아직 값을 바꾸지 않은 상태)이므로, result[ord(char) - 97]에 i 값 저장
✏️ enumerate() 함수
반복문에서 인덱스(index)와 원소를 동시에 접근할 수 있도록 하는 함수
for 문의 in 뒷 부분을 enumerate() 함수로 한 번 감싸주어서 사용한다.
[enumerate() 함수의 기본형]
enumerate(iterable, start=0)
- iterable: 인덱스와 값을 가져올 대상이 되는 순서가 있는 자료형
- start: 인덱스의 시작값을 지정하는 매개변수로, 기본값은 0
[반복문에서의 사용 예시]
fruits = ['apple', 'banana', 'orange']
# enumerate를 사용하지 않은 경우
for i in range(len(fruits)):
print(i, fruits[i])
# enumerate를 사용한 경우
for index, value in enumerate(fruits, start=1):
print(index, value)
✏️ ord() 함수
하나의 문자를 인자로 받고 해당 문자에 해당하는 유니코드 정수를 반환하는 함수
ex) ord('a')를 넣으면 정수 97을 반환
📍 참고 링크
파이썬의 enumerate() 내장 함수로 for 루프 돌리기
Engineering Blog by Dale Seo
www.daleseo.com
[python] 파이썬 ord 함수, chr 함수 설명과 예제
안녕하세요. BlockDMask입니다. 오늘은 아스키코드 변환하는 함수인 ord, chr 함수에 대해서 알아보겠습니다. 1. ord 함수, chr 함수 설명 2. ord 함수, chr 함수 예제 1. 파이썬 ord 함수, chr 함수 기본 설명 2
blockdmask.tistory.com
'개발공부 > 코테' 카테고리의 다른 글
[백준 10773: 제로] 파이썬 풀이 _ 스택 (stack) (0) | 2024.02.01 |
---|---|
[백준 7785: 회사에 있는 사람] 파이썬 풀이 _ list와 set의 시간복잡도 (0) | 2024.01.22 |
[백준 9012: 괄호] 파이썬 풀이 _ 특정 문자열 제거, 변경 replace() (1) | 2023.11.24 |
[백준 2004: 조합 0의 개수] C++ 풀이 (1) | 2023.11.20 |
[백준 10808: 알파벳 개수] C++ 풀이 (1) | 2023.11.17 |