Post

[Golang] 프로그래머스 Lv.1 핸드폰 번호 가리기

핸드폰 번호 가리기 문제에 대해 풀이하고 테스트 코드를 작성 해보겠습니다.

문제 설명

프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.

제한사항

  • phone_number는 길이 4 이상, 20이하인 문자열입니다.

입출력 예

phone_numberreturn
“01033334444””*******4444”
“027778888””*****8888”

풀이

1
2
3
4
5
6
7
8
9
10
11
func solution(phone_number string) string {

	var sb strings.Builder
	for i := 0; i < len(phone_number)-4; i++ {
		sb.WriteString("*")
	}

	sb.WriteString(phone_number[len(phone_number)-4:])

	return sb.String()
}
  • strings.Builder 는 문자열을 효율적으로 연결할 수 있도록 설계
  • sb 를 선언
  • i를 0 부터 len(phone_number)-4 까지 순회
    • sb.WriteString 을 이용하여 "*"sb의 버퍼에 추가
  • 순회가 끝나면, phone_number 슬라이스의 마지막 문자 4개를 슬라이싱하여 sb의 버퍼에 추가
  • sb 버퍼에 쌓인 문자열을 반환

테스트코드

유닛 테스트

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const TESTCOUNT = 2

var (
	phone_number = [TESTCOUNT]string{
		"01033334444",
		"027778888",
	}

	result = [TESTCOUNT]string{
		"*******4444",
		"*****8888",
	}
)

func TestSolution(t *testing.T) {
	for i := 0; i < TESTCOUNT; i++ {
		fmt.Printf("phone_number : %v\n", phone_number[i])
		fmt.Printf("result : %v\n", result[i])
		fmt.Printf("solution result : %v\n", solution(phone_number[i]))
	}
}
1
2
3
4
5
6
7
8
9
10
11
$ go test -v
=== RUN   TestSolution
phone_number : 01033334444
result : *******4444
solution result : *******4444
phone_number : 027778888
result : *****8888
solution result : *****8888
--- PASS: TestSolution (0.01s)
PASS
ok      golang-coding-test/Lv1/mask_phonenumber 0.326s

Github 바로가기

This post is licensed under CC BY 4.0 by the author.