Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 우편번호 형식 검증하기: 유효성 검사 프로그램


우편번호가 하나 주어졌을 때, 이 번호가 유효한지 판별해야 하는 상황을 가정해 봅시다. 유효한 우편번호는 다음 두 가지 조건을 모두 충족해야 합니다.

  • 반드시 숫자여야 하며, 그 값은 100000 이상 999999 이하(양 끝값 포함) 범위 안에 있어야 합니다.

  • 교차 반복 숫자 쌍(alternating repetitive digit pair)이 두 개 이상 포함되어서는 안 됩니다. 여기서 교차 반복 쌍이란 한 자리를 건너뛴 위치의 두 숫자가 서로 같은 경우를 의미합니다.

예를 들어 입력이 s = "700035"라면 결과는 True입니다. 이 값은 100000~999999 범위에 속하면서, 한 자리를 건너뛰고 비교했을 때 같은 숫자로 이루어진 쌍이 전혀 없기 때문입니다.

해결 접근 방법

이 문제는 다음 절차에 따라 해결할 수 있습니다.

  • n := 문자열 s의 길이
  • nb := 0
  • ok := True
  • i를 0부터 n-1까지 반복하며 다음을 수행합니다.
    • ok := ok AND (s[i]가 숫자인지 여부)
  • i를 0부터 n-3까지 반복하며 다음을 수행합니다.
    • nb := nb + (s[i]와 s[i+2]가 같으면 1, 아니면 0)
  • ok가 참이고, n이 6과 같고, s[0]이 '0'이 아니고, nb가 2 미만이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

동작 원리

첫 번째 반복문은 문자열의 모든 문자가 숫자로만 이루어져 있는지 확인합니다. 두 번째 반복문은 각 문자를 두 칸 뒤의 문자와 비교하여 교차 반복 쌍의 개수(nb)를 셉니다. 마지막으로 네 가지 조건, 즉 전체가 숫자인지, 길이가 정확히 6자리인지, 첫 자리가 0이 아닌지, 교차 반복 쌍이 1개 이하인지를 종합적으로 판단하여 최종 결과를 반환합니다.

예제 코드

아래 구현 예시를 통해 더 자세히 이해해 보겠습니다.

def solve(s):
    n = len(s)
    nb = 0
    ok = True
    for i in range(n):
        ok = ok and s[i].isdigit()
    for i in range(n-2):
        nb += s[i] == s[i+2]

    return ok and n == 6 and s[0] != '0' and nb < 2

s = "700035"
print(solve(s))

입력

"700035"

출력

True