본문 바로가기

파이썬(문제풀이)

파이썬 주민등록번호 분리

준이의 주민등록번호 분리하기

준이의 주민등록번호 '881120-1068234'를 생년월일과 뒤의 숫자로 분리하는 방법은 여러 가지가 있어요. 문자열을 다루는 다양한 방법을 활용할 수 있습니다. 여기 파이썬(Python)을 기준으로 몇 가지 방법을 소개할게요.


# 1: split() 함수 활용하기

가장 직관적이고 쉬운 방법이에요. 주민등록번호의 **하이픈(-)**을 기준으로 문자열을 나누는 방법입니다.

jumin = '881120-1068234'
jumin_list = jumin.split('-') # 하이픈을 기준으로 문자열을 나누어 리스트로 만듭니다.

birth_date = jumin_list[0]
 뒷부분 = jumin_list[1]

print(f'생년월일: {birth_date}')
print(f'뒷부분: {뒷부분}')

코드분석

1. jumin = '881120-1068234'

이 줄은 **'881120-1068234'**라는 문자열을 **jumin**이라는 변수에 할당합니다. 이 문자열은 준이의 주민등록번호를 나타냅니다.


2. jumin.split('-')

이 부분은 코드의 핵심입니다. split() 메서드는 특정 문자를 기준으로 문자열을 분리하여 **리스트(list)**로 반환하는 파이썬의 내장 함수입니다. 여기서는 하이픈(-)을 구분자로 사용하여 jumin 문자열을 분리합니다. 결과는 **['881120', '1068234']**가 됩니다. 이 리스트는 jumin_list라는 변수에 저장됩니다.


3. birth_date = jumin_list[0]

리스트의 인덱스는 0부터 시작합니다. jumin_list의 첫 번째 요소인 **'881120'**는 인덱스 0에 위치하므로, 이 값이 birth_date 변수에 할당됩니다.


4. 뒷부분 = jumin_list[1]

jumin_list의 두 번째 요소인 **'1068234'**는 인덱스 1에 위치합니다. 이 값이 뒷부분 변수에 할당됩니다.


5. print(f'생년월일: {birth_date}')

**f-string**을 사용하여 문자열을 출력합니다. 중괄호 {} 안의 변수 **birth_date**가 해당 값인 **'881120'**으로 대체되어 **생년월일: 881120**이라는 문자열을 출력합니다.


6. print(f'뒷부분: {뒷부분}')

마찬가지로 f-string을 사용하여 뒷부분 변수의 값인 **'1068234'**가 출력되어 **뒷부분: 1068234**라는 문자열을 출력합니다.


# 2: 문자열 슬라이싱(Slicing) 활용하기

문자열의 특정 범위를 잘라내는 슬라이싱을 이용하는 방법이에요. 하이픈의 위치가 고정되어 있다는 점을 활용합니다.

jumin = '881120-1068234'

birth_date = jumin[:6] # 첫 번째 문자부터 6번째 문자까지 자릅니다.
 뒷부분 = jumin[7:] # 7번째 문자부터 끝까지 자릅니다.

print(f'생년월일: {birth_date}')
print(f'뒷부분: { 뒷부분}')

 

코드 분석

  1. jumin = '881120-1068234'
    • **jumin**이라는 변수에 준이의 주민등록번호 문자열을 할당합니다. 이 문자열은 총 14개의 문자로 이루어져 있으며, 각 문자는 0부터 시작하는 고유한 인덱스(index) 번호를 가집니다.
  2. birth_date = jumin[:6]
    • 슬라이싱을 활용하여 문자열의 첫 부분을 잘라냅니다. jumin[:6]는 인덱스 0부터 인덱스 5까지의 문자열을 의미합니다. 파이썬 슬라이싱에서 [시작:끝]은 시작 인덱스는 포함하고 끝 인덱스는 포함하지 않습니다.
    • 따라서 '881120'이 birth_date 변수에 저장됩니다.
  3. 뒷부분 = jumin[7:]
    • 이 코드 역시 슬라이싱을 사용합니다. jumin[7:]는 인덱스 7부터 문자열의 끝까지의 모든 문자를 의미합니다. 7 인덱스에는 '1'이 위치하고, 그 뒤로 '068234'가 이어집니다.
    • 하이픈(-)은 인덱스 6에 있으므로, 이 코드는 하이픈을 건너뛰고 그 다음 문자부터 끝까지의 문자열을 정확하게 잘라냅니다.
    • 결과적으로 '1068234'가 뒷부분 변수에 저장됩니다.
  4. print(f'생년월일: {birth_date}')
    • f-string을 사용하여 birth_date 변수에 저장된 값('881120')을 출력합니다.
  5. print(f'뒷부분: { 뒷부분}')
    • 마찬가지로 **f-string**을 사용하여 뒷부분 변수에 저장된 값('1068234')을 출력합니다.

이 코드는 문자열의 고정된 형식(생년월일 6자리, 하이픈, 뒤의 숫자 7자리)을 활용하여 간단하면서도 효율적으로 데이터를 분리하는 방법을 보여줍니다.


#3: find() 함수와 슬라이싱 조합하기

하이픈의 위치가 달라질 수 있는 경우에 유용한 방법입니다. find() 함수로 하이픈의 위치를 찾은 뒤, 슬라이싱을 적용합니다.

jumin = '881120-1068234'
hyphen_index = jumin.find('-') # 하이픈의 위치(인덱스)를 찾습니다.

birth_date = jumin[:hyphen_index]
 뒷부분 = jumin[hyphen_index+1:]

print(f'생년월일: {birth_date}')
print(f'뒷부분: {뒷부분}')

 

코드 분석

  1. jumin = '881120-1068234'
    • 이 코드는 **jumin**이라는 변수에 주민등록번호 문자열을 할당합니다. 이 문자열은 0부터 시작하는 인덱스를 가집니다.
  2. hyphen_index = jumin.find('-')
    • find() 메서드는 문자열에서 특정 문자가 처음 나타나는 **인덱스(위치)**를 반환합니다. 여기서는 하이픈(-)의 위치를 찾습니다.
    • 문자열 '881120-1068234'에서 하이픈은 인덱스 6에 위치하므로, hyphen_index 변수에는 6이라는 정수 값이 할당됩니다.
  3. birth_date = jumin[:hyphen_index]
    • 슬라이싱을 사용하여 문자열의 앞부분을 잘라냅니다. jumin[:hyphen_index]는 **jumin[:6]**과 동일하며, 인덱스 0부터 5까지의 문자열을 추출합니다.
    • 따라서 '881120'이 birth_date 변수에 저장됩니다.
  4. 뒷부분 = jumin[hyphen_index+1:]
    • 이 코드 또한 슬라이싱을 사용합니다. **hyphen_index**에 저장된 값 61을 더하면 7이 됩니다.
    • jumin[7:]는 인덱스 7부터 문자열의 끝까지를 의미하므로, 하이픈 바로 다음 위치부터 모든 문자를 추출합니다.
    • 결과적으로 '1068234'가 뒷부분 변수에 저장됩니다.
  5. print(f'생년월일: {birth_date}')
    • f-string을 사용하여 birth_date 변수의 값('881120')을 출력합니다.
  6. print(f'뒷부분: {뒷부분}')
    • f-string을 사용하여 뒷부분 변수의 값('1068234')을 출력합니다.