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

파이썬으로 전화번호 형식 재정렬 프로그램 만들기


전화번호가 문자열 형태로 주어져 있다고 가정해 봅시다. 이 전화번호는 숫자와 공백, 그리고 하이픈('-')으로 구성되어 있습니다. 우리는 이 전화번호를 정해진 규칙에 따라 새로운 형식으로 다시 포맷하려고 합니다. 규칙은 다음과 같습니다.

  • 문자열에 포함된 모든 공백과 하이픈을 제거합니다.

  • 남은 자릿수가 4개 이하가 될 때까지, 왼쪽부터 오른쪽 방향으로 숫자를 3자리씩 묶습니다.

  • 마지막에 남은 자릿수는 아래와 같이 그룹화합니다.

    • 2자리 남은 경우: 길이 2짜리 블록 하나로 구성합니다.

    • 3자리 남은 경우: 길이 3짜리 블록 하나로 구성합니다.

    • 4자리 남은 경우: 길이 2짜리 블록 두 개로 나누어 구성합니다.

이렇게 만들어진 블록들은 하이픈(-)으로 연결됩니다. 즉, 우리가 찾아야 하는 것은 재구성된 전화번호입니다.

예를 들어 입력이 s = "9-6-84102-4 7-8"이라면, 출력은 "968-410-24-78"이 됩니다.

해결 접근 방법

이 문제를 해결하기 위해 다음 단계를 따릅니다.

  • digits := 빈 문자열로 초기화

  • blk := 빈 문자열로 초기화

  • s의 각 문자 i에 대해 반복합니다.

    • i가 숫자라면 → blk := blk에 i를 이어 붙입니다.

    • blk의 길이가 3이 되면 → digits := digits에 blk과 하이픈("-")을 이어 붙이고, blk := 빈 문자열로 초기화합니다.

  • 반복이 끝난 후 blk의 길이가 0이라면 → digits에서 마지막 하이픈을 제외한 부분(digits[:-1])을 반환합니다.

  • blk의 길이가 1이라면 → 마지막 두 자리를 하나의 블록으로 재배치해야 하므로, digits[:-2] + "-" + digits[-2] + blk을 반환합니다.

  • blk의 길이가 2라면 → digits에 blk을 그대로 이어 붙여 반환합니다.

예제 코드 (Python)

다음 구현을 통해 더 잘 이해해 보겠습니다.

def solve(s):
    digits = ""
    blk = ""
    for i in s:
        if i.isnumeric():
            blk += i
        if len(blk) == 3:
            digits += blk+"-"
            blk = ""

    if len(blk) == 0:
        return digits[:-1]
    elif len(blk) == 1:
        return digits[:-2]+"-"+digits[-2]+blk
    elif len(blk) == 2:
        return digits+blk

s = "9-6-84102-4 7-8"
print(solve(s))

입력

"9-6-84102-4 7-8"

출력

968-410-24-78