본문 바로가기
C#/프로그래머스

[프로그래머스] C# : 핸드폰 번호 가리기

by TODAYCODE 2021. 7. 28.
반응형

프로그래머스 코딩테스트 연습 Level 1 - 핸드폰 번호 가리기

 

코딩테스트 연습 - 핸드폰 번호 가리기

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

programmers.co.kr

문제의 핵심

1. 문자열의 원하는 부분만 가져올 수 있는가?

2. 문자열끼리의 덧셈을 이해하고 있는가?

3. C#의 인덱싱 기능을 활용할 수 있는가?

 


 

이 문제를 보자마자 C#에 존재하는 .. 문법을 사용하려 했는데

프로그래머스에서는 .. 을 사용하면 컴파일에러가 발생한다.

아마 C# 버전이 낮은 것 같다.

string[1..5]

이렇게 쓰면 문자열의 1번 인덱스부터 5번 인덱스-1까지 슬라이싱해서 가져올 수 있어서

정말 간편한 기능이고 ^ 기호를 사용해서 역순으로도 가져올 수 있다.

 

근데 프로그래머스는 .. 과 ^ 기능이 모두 사용이 현재는 불가능한 것 같다.

이 문법들을 사용하면 매우 간단하게 문제를 풀 수 있다.

해당 풀이 코드는 본 글 마지막에 첨부해두었다.

 

 

아무튼 그럼, 프로그래머스에서 가능한 방식으로 해결해보자.

사실 이것도 간단하긴 하다.

입력받은 폰넘버의 길이만큼 for문을 돌려주고

i값의 크기에 따라서

*를 더해주느냐, 번호를 더해주느냐를 구분해주면 된다.

i의 크기가 폰넘버배열길이의 -4보다 작은지 큰지를 구분해주면 된다.

 

 

 

정답 코드 - 프로그래머스

public class Solution
    {
        public string solution(string phone_number)
        {
            string answer = "";

            for (int i = 0; i < phone_number.Length; i++)
            {
                if (i < phone_number.Length-4)
                {
                    answer += "*";
                }
                else
                {
                    answer += phone_number[i];
                }
            }

            return answer;
        }
    }

 

정답 코드 - 더 짧은 버전

public class Solution
{
    public string solution(string phone_number)
    {
        string answer = "";
        
        // 폰넘버길이의 -4 만큼 *를 answer에 더해준다.
        for (int i = 0; i < phone_number.Length - 4; i++)
        {
            answer += "*";
        }
        
        // 입력받은 번호를 뒤에서 4번째부터 끝까지 잘라온다.
        answer += phone_number[^4..];

        return answer;
    }
}

 

 

반응형

댓글