📝24.01.17
🔗 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12948
문제 설명
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부*
으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
하드 코딩에 가까운 풀이를 구상했다...
public class Solution {
public string solution(string phone_number) {
string answer = "";
string str = phone_number.Substring(phone_number.Length - 4);
for(int i = 0; i < phone_number.Length-4; i++) {
answer += "*";
}
answer += str;
return answer;
}
}
PadLeft()
를 이용한 풀이다. 알고 있는 것과 이를 적절한 곳에 활용하는 것은 다른 차원이라는 생각이 들었다.
public class Solution {
public string solution(string phone_number) {
string answer = phone_number.Substring(phone_number.Length - 4);
answer = answer.PadLeft(phone_number.Length, '*');
return answer;
}
}
오답
길이가 4인 경우가 제외되었다.
#include <string>
#include <vector>
using namespace std;
string solution(string phone_number) {
string answer = "";
for(int i = 0; i < phone_number.length() - 4; i++) {
answer = phone_number.replace(i, 1, "*");
}
return answer;
}
정답
string answer = phone_number;
로 수정하여 해결.
#include <string>
#include <vector>
using namespace std;
string solution(string phone_number) {
string answer = phone_number;
for(int i = 0; i < phone_number.length() - 4; i++) {
answer = phone_number.replace(i, 1, "*");
}
return answer;
}
이렇게 일차원적인 풀이가 더 나을 수도 있다.
#include <string>
#include <vector>
using namespace std;
string solution(string phone_number) {
string answer = "";
for (int i = 0; i < phone_number.size() - 4; i++ )
{
phone_number[i] = '*';
}
answer = phone_number;
return answer;
}