ord() 함수란?
ord() 함수는 문자를 해당하는 유니코드(ASCII) 값으로 변환하는 함수로, 문자를 숫자로 변환하는 함수
1. 기본 사용법
print(ord('A')) # 65
print(ord('a')) # 97
print(ord('Z')) # 90
print(ord('z')) # 122
- 대문자 'A'의 유니코드 값은 65
- 소문자 'a'의 유니코드 값은 97
- 대소문자 차이는 32 → ord('a') - ord('A') == 32
2. 알파벳을 리스트 인덱스로 변환하는 방법
알파벳을 0부터 25까지의 인덱스로 변환하려면?
print(ord('a') - ord('a')) # 0
print(ord('b') - ord('a')) # 1
print(ord('z') - ord('a')) # 25
- 'a' ~ 'z'를 0~25의 숫자로 변환 가능
- 알파벳 개수를 저장할 리스트(count[26])와 함께 사용하면 유용함
3. ord()를 활용한 알파벳 빈도수 카운팅
주어진 문자열에서 각 알파벳이 몇 번 등장하는지 카운트하는 코드를 구현하며 비효율적이라고 생각이 들었고.. 다른 방법을 찾아보다 ord()함수를 찾아보게 되었음. 둘을 비교해서 차이점과 장점 알아보자
처음에 생각했던 방법
import string
alphabet_list = list(string.ascii_lowercase)
dic = {}
word = input()
word_str = list(word)
for i in alphabet_list:
if i in word_str:
dic[i] = word_str.count(i)
else:
dic[i] = 0
for i in dic.values():
print(i, end=' ')
문제점
- alphabet_list를 만들어 매번 count()를 호출하여 해당 알파벳 개수를 찾음
- count(i)는 O(N) → 문자열이 길면 매번 모든 문자를 검사해야 하므로 비효율적
- 총 O(26 × N) = O(N) 인데, 불필요한 연산이 많음
ord() , 리스트 활용 방법
word = input()
count_list = [0] * 26 # 알파벳 개수 저장할 리스트
for char in word:
count_list[ord(char) - ord('a')] += 1
print(*count_list)
개선된 코드의 장점
- ord(char) - ord('a')를 활용해 O(1) 연산으로 알파벳 인덱스를 직접 접근
- 리스트(count_list[26])를 활용하여 문자열을 한 번만 순회(O(N))
- 기존 코드보다 빠르고 효율적
시간 복잡도 비교
기존 코드 (count() 사용) | O(26 × N) = O(N) | count()를 26번 호출 (불필요한 반복) |
개선된 코드 (ord() + 리스트 사용) | O(N) | 문자열을 한 번만 순회 (최적화) |
4. ord()와 반대되는 chr() 함수
chr() 함수는 ord()의 반대 역할! (숫자를 다시 문자로 변환)
print(chr(65)) # 'A'
print(chr(97)) # 'a'
print(chr(122)) # 'z'
- chr(65) → 'A', chr(97) → 'a'
- 숫자를 다시 문자로 변환하는 데 사용됨
정리: ord() 함수 핵심 포인트
ord('A') | 문자의 유니코드 값 반환 (65) |
ord('a') - ord('a') | 알파벳을 0~25 범위의 인덱스로 변환 |
chr(65) | 숫자를 다시 문자로 변환 ('A') |
알파벳 개수 카운팅 | count_list[ord(char) - ord('a')] += 1 활용 |
반응형
'Python > 문법 정리' 카테고리의 다른 글
최빈값 계산 시 dict와 collections.Counter 활용 방법 (0) | 2025.02.22 |
---|