Pink Rose Flower

Python/문법 정리

ord() 함수 사용법

hyunjoo 2025. 2. 22. 17:10

 

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 활용

 

 

반응형