본문 바로가기
  • Top Genius in the world
알고리듬

[알고리듬] #30 주민등록번호

by Mr.Algo 2024. 4. 2.
728x90
반응형

파이썬 실습창을 열 수 있습니다.실습창 열기

 

 

1. 주민등록번호

현재 사용하는 주민등록번호는 다음과 같이 구성되어 있습니다.

Y Y M M D D - G H I J K L M
생년   성별 지역고유번호 등록
순서
검정
번호

 

전체 14자리인데 가운데의 -(하이펀)을 제외하면 13자리입니다.

각 자리의 숫자가 의미하는 것은 위의 표와 같다.

G자리의 숫자는 성별 뿐만 아니라 출생 년도와 출생지도 나타냅니다.

 

G자리 숫자의 의미는 다음 표와 같습니다.

G 의미 G 의미
0 1800년대 출생한 대한민국 여성 5 1900년대 출생한 외국인 남성
1 1900년대 출생한 대한민국 남성 6 1900년대 출생한 외국인 여성
2 1900년대 출생한 대한민국 여성 7 2000년대 출생한 외국인 남성
3 2000년대 출생한 대한민국 남성 8 2000년대 출생한 외국인 여성
4 2000년대 출생한 대한민국 여성 9 1800년대 출생한 대한민국 남성

 

우리가 할 일은 이름과 주민등록번호를 입력받아서,

이름, 생년월일(4자리), 출생지, 성별을 출력하는 것입니다.

 

입력

같은 줄에 이름과 주민등록번호가 공백으로 구분되어 입력된다.

이름 사이에 공백이 없으며, 주민등록번호는 가운데에 -(하이펀)이 있는 14자리이다.

 

출력

같은 줄에 이름, 생년월일, 출생지, 성별을 하나의 공백으로 구분하여 출력한다.

  • 이름: 이름은 입력과 같이 출력한다.
  • 생년월일: 4자리 출생년도로 바꾸어 출력한다.(예:G자리 숫자가 3인 경우 020728 => 20020728)
  • 출생지: 대한민국은 'korea', 외국은 'foreign'을 출력한다.
  • 성별: 남성은 'male', 여성은 'female'을 출력한다.

각 항목은 15칸으로 왼쪽 정렬하여 출력한다.

 

입력의 예

Parkmoonsoo 950717-9120274

※ 이름과 번호 사이에 공백이 있습니다.

 

출력의 예

Parkmoonsoo     18950717        korea           male  

 

 

다음은 프로그램의 예입니다.

분석하여 이해하세요.

k,f,m,fe='korea foreign male female'.split()            # 출력에 사용할 단어를 준비한다.
table=((18,k,fe),(19,k,m),(19,k,fe),(20,k,m),(20,k,fe), # G자리 숫자 의미를 인덱스 순서로 표를 만든다.
       (19,f,m),(19,f,fe),(20,f,m),(20,f,fe),(18,k,m))
name,num=input().split()   # 이름과 주민번호를 분할한다.
g=int(num[7])              # G자리의 숫자혈 문자를 숫자로 바꾼다
born,area,gender=table[g]  # 표(table)의 값을 각 변수에 바인딩한다.
born=str(born)+num[:6]     # 생년의 앞 2자리를 추가한다.
r=f'{name:15s} {born:15s} {area:15s} {gender:15s}'
print(r)

'''
8번 줄의 f-포맷이 실행되지 않으면 다음과 같이 고급 포맷으로 바꾸세요.

r='{0:15s} {1:15s} {2:15s} {3:15s}'.format(name,born,area,gender)

'''

 

쉽지 않은 문제에 도전하였습니다.

이 코드를 이해하였다면 보통 수준이 넘습니다.

충분히 이해되지 않아도 괜찮습니다.

프로그램을 구경하는데 목적이 있습니다.

 

수고하셨습니다.

오늘 끝. 

 

 

728x90
반응형