전화 번호가 문자열로 있다고 가정합니다. 전화번호는 숫자, 공백 및/또는 대시 '-'로 구성됩니다. 특정 방식으로 전화 번호를 다시 포맷하고 싶습니다. 몇 가지 규칙이 있습니다 -
-
시작 부분의 모든 공백과 대시 제거
-
4자리 이하가 남을 때까지 왼쪽에서 오른쪽으로 숫자를 길이가 3인 블록으로 그룹화합니다.
-
마지막 숫자는 다음과 같이 그룹화됩니다. -
-
2자리의 경우:길이가 2인 단일 블록.
-
3자리의 경우:길이가 3인 단일 블록.
-
4자리:길이가 각각 2인 블록 2개 추가
-
이 블록은 대시로 묶입니다. 다시 포맷된 전화번호를 찾아야 합니다.
따라서 입력이 s ="9-6-84102-4 7-8"과 같으면 출력은 "968-410-24-78"이 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
숫자 :=빈 문자열
-
blk :=빈 문자열
-
s의 각 문자 i에 대해 수행
-
i가 숫자이면
-
blk :=blk 연결 i
-
-
blk의 크기가 3과 같으면
-
숫자 :=숫자 연결 blk 연결 대시("-")
-
blk :=빈 문자열
-
-
-
blk의 크기가 0과 같으면
-
인덱스 0부터 자릿수-1까지의 자릿수 하위 문자열 반환]
-
-
그렇지 않으면 blk의 크기가 1과 같을 때
-
인덱스 0에서 숫자 크기-2까지의 숫자 부분 문자열 반환] 대시 연결("-") 숫자의 두 번째 마지막 문자 연결 blk
-
-
그렇지 않으면 blk의 크기가 2와 같을 때
-
숫자 연결 blk
반환
-
예제(파이썬)
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
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