16196번 - 중국 신분증 번호
문제요약
- 18자리 중국인 신분증 번호가 주어지면 아래 조건에 부합하는지 체크한다.
- 18자리 중 처음 6자리는 지역코드이다. 유효한 지역코드 리스트는 입력으로 들어온다.
- 18자리 중 7번째 자리부터 14번째 자리는 생일코드이다. 유효한 생일코드는 1900-01-01 부터 2011-12-31이다.
- 18자리 중 15번째 자리부터 17번째 자리는 순서코드이다.
000
을 제외한 순서코드는 전부 유효하다. - 18자리 중 마지막 값은 0 ~ 9 또는 X로 X는 10을 나타낸다. 마지막 값은 해시값을 계산하기 위해 사용되는 코드로 아래 식을 만족해야한다. An 은 18자리 중 n번째 자리 값을 나타낸다.
- 만약 조건을 하나라도 만족시키지 못하면
I
를 출력한다. - 조건을 모두 만족시킨 경우 순서코드가 홀수이면
M
을 짝수이면F
를 출력한다.
접근법
굉장히 간단한 문제다. 조건을 검사할 if
문을 잘 작성하면 금방 해결할 수 있다. 생일코드를 검사할 때 윤년을 고려해야 한다는 것만 기억하면 굉장히 쉽게 풀 수 있다.
pseudocode
if region valid and birthday valid and sequence valid and hashing valid:
if sequence is odd number:
print "M"
if sequence is even number:
print "F"
else:
print "I"
댓글남기기