728x90
백준 10808번: 알파벳 개수
📌 문제
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각 알파벳이 단어에 몇 개가 포함되어 있는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
출력
단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.
📝 문제 접근 방법
아이디어
문자열을 순회하며 각 알파벳의 빈도를 리스트에 저장
- 알파벳 빈도수를 저장할 공간 준비
- 알파벳은 총 26자이므로 각 알파벳에 해당하는 위치에 빈도수를 저장할 배열을 만들어 둡니다.
- 이때 배열을 0으로 초기화해 두면 문자열에 등장하지 않는 알파벳은 자동으로 개수가 0으로 처리됩니다.
- 문자열을 순회하며 빈도수 업데이트
- 문자열을 처음부터 끝까지 하나씩 살펴보면서 각 문자가 몇 번 등장하는지 세어줍니다.
- 각 문자의 알페벳 순서를 인덱스로 변환해야 합니다. 이를 위해 ord() 함수를 사용해 문자의 아스키 값을 얻고 ord('a') 를 빼주면 해당 문자가 알파벳에서 몇 번째인지 알 수 있습니다.
예제
baekjoon
👩💻 나의 답안
import sys
input = sys.stdin.readline
s = input().strip()
freq = [0] * 26
for letter in s:
freq[ord(letter) - ord('a')] += 1
print(*freq)
✨ 새로 알게 된 점
1. 문자를 배열 인덱스로 매핑
ord() 함수를 사용해 문자를 아스키 코드로 변환하고, ord('a') 를 빼주면 소문자 알파벳을 배열의 인덱스로 쉽게 변환할 수 있다는 점을 배웠습니다. 이렇게 하면 각 알파벳이 배열의 고유 인덱스에 대응되어 추가 조건 없이 빠르게 접근할 수 있습니다. 이 방식은 문자뿐만 아니라, 연속된 숫자나 날짜처럼 기준값이 있는 데이터 집합에도 적용할 수 있어, 연속된 데이터를 배열 인덱스로 효율적으로 매핑하는 데 유용합니다.
728x90
반응형
'코딩테스트 대비' 카테고리의 다른 글
[파이썬(Python)] 백준 10820번 문자열 분석 (0) | 2024.11.16 |
---|---|
[파이썬(Python)] 백준 10809번 알파벳 찾기 (0) | 2024.11.15 |
[파이썬(Python)] 백준 1918번 후위 표기식 (0) | 2024.11.14 |
[(파이썬/Python)] 백준 1935번 후위 표기식2 (0) | 2024.11.12 |
[파이썬(Python)] 백준 17299번 오등큰수 (0) | 2024.11.08 |