본문 바로가기

IT 기초/알고리즘

아스키코드(ASCII), ord(), chr() 개념 및 예시

코딩테스트를 준비하면서 아스키 코드를 알면 아이디어를 내는 데 더 쉬웠을 것같다.
근데 기억이 가물가물하여 한번 리마인드 차원에서 정리를 해보려한다.

 

1. 개념

1-1. 아스키코드(ASCII)

알고리즘 문제를 풀다 보면 문자('A', 'a', '0' 같은 것)를 숫자로 비교하거나, 반대로 숫자를 문자로 바꿔야 하는 경우가 자주 나온다.

이때 꼭 알아야 하는 게 아스키코드(ASCII)이다.

  • ASCII는 문자를 컴퓨터가 이해할 수 있는 숫자로 매핑한 표준이다.
  • 예를 들어
    • 'A' -> 65
    • 'Z' -> 90
    • 'a' -> 97
    • 'z' -> 122
    • '0' -> 48
    • '9' -> 57

즉, 문자도 결국 숫자로 다룰 수 있다는 뜻이다.

그래서 정렬, 대소문자 변환, 문자 범위 판별 같은 작업이 훨씬 쉬워진다.

1-2. ord()와 chr() 함수

파이썬에서는 아스키코드를 다루기 위해 ord()와 chr()를 사용한다.

  • ord(문자): 문자를 숫자(코드값)로 변환
  • chr(숫자): 숫자(코드값)를 문자로 변환
print(ord('A'))  # 65
print(ord('a'))  # 97

print(chr(65))   # A
print(chr(97))   # a

이 두함수만 잘 써도 문자열 관련 문제에서 구현 속도가 확 올라갈 수 있다.


2.예시

알고리즘 테스트에서 자주 나오는 형태의 예시가 있다.

 

2-1. 예시1: 대소문자를 소문자로 바꾸기

ch = 'D'
lower_ch = chr(ord(ch) + 32)
print(lower_ch)  # d
  • +32인 이유는 대소문자와 소문자의 차이는 항상 32이기 때문이다.

2-2. 예시2: 문자가 알파벳 소문자인지 판별하기

ch = 'g'
if ord('a') <= ord(ch) <= ord('z'):
    print("소문자입니다.")
else:
    print("소문자가 아닙니다.")
  • 문자 비교를 코드값 비교로 바꾸면 조건이 명확해지고 실수가 줄어든다.

2-3. 예시3: 숫자 문자 '5'를 정수 5로 바꾸기

ch = '5'
num = ord(ch) - ord('0')
print(num)  # 5

반대로 정수 5를 문자 '5'로도 만들 수 있다.

num = 5
ch = chr(num + ord('0'))
print(ch)  # '5'

 

3.추가

파이썬에서 isalpha() 함수가 존재한다.

이는 오직 알파벳(문자)으로만 이루어져있는지를 확인해주는 함수이다.

# 1. 순수한 알파벳만 있는 경우
print("Apple".isalpha())   # True
print("abcde".isalpha())   # True

# 2. 숫자나 특수문자가 섞인 경우
print("Apple123".isalpha()) # False (숫자 '123'이 섞임)
print("hi!".isalpha())      # False (특수문자 '!'가 섞임)

# 3. 공백(띄어쓰기)이 섞인 경우 (많이 실수하는 부분!)
print("Hello World".isalpha()) # False (가운데 공백이 있어서 False입니다)

 

또한 isalpha() 외에도 문자열의 종류를 판별하는 함수들이 존재한다.

  • isdigit(): 숫자로만 이루어져 있는가
  • isalnum(): 알파벳 또는 숫자로만 이루어져 있는가
  • isspace(): 오직 공백(띄어쓰기, 탭 등)으로만 이루어져 있는가

4.요약

  • 문자도 컴퓨터에서 숫자로 처리된다.
  • ASCII는 문자를 숫자로 대응시킨 표준이다.
  • ord()는 문자 -> 숫자, chr()는 숫자 -> 문자 변환함수이다.
  • 알고리즘 문제에서 다음 상황에 특히 유용하다.
    • 대소문자 변환
    • 문자 범위 판별(알파벳/숫자 여부 확인)
    • 숫자 문자와 정수 간 변환