16196번 - 중국 신분증 번호

문제요약

  1. 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번째 자리 값을 나타낸다.
  2. 만약 조건을 하나라도 만족시키지 못하면 I를 출력한다.
  3. 조건을 모두 만족시킨 경우 순서코드가 홀수이면 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"

카테고리:

업데이트:

댓글남기기