문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한 사항
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
입출력 예
s return
"try hello world" "TrY HeLlO WoRlD"
#include <string>
using namespace std;
string solution(string s) {
string answer = "";
int cnt = 0;
for(auto i : s)
{
if(isalpha(i))
{
if(cnt%2==0) answer+=toupper(i);
else answer+=tolower(i);
cnt++;
}
else {
answer+=i;
cnt=0;
}
}
return answer;
}
- "try hello world" -> "TrY HeLlO WoRlD" 일때
문자의 짝수 인덱스에 대문자가 와야하는 것을 알았지만,
문자의 홀수 인덱스는 소문자가 와야한다는 것을 몰랐다.
테스트 케이스에선 모두 소문자이지만 대소문자가 섞여있을 수 있기 때문이다.
string solution(string s) {
string answer = "";
int nIndex = 1;
for (int i = 0; i < s.size(); i++, nIndex++)
{
if (s[i] == ' ')
{
nIndex = 0;
answer += " ";
}
else
nIndex & 1 ? answer += toupper(s[i]) : answer += tolower(s[i]);
}
return answer;
}
- for (int i = 0; i < s.size(); i++, nIndex++)을 통해 index숫자를 자동으로 올린다.
- nIndex & 1 ? answer += toupper(s[i]) : answer += tolower(s[i]); 삼항연산자를 통해 코드를 간결하게 구현한다.
예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.
#include <string>
#include <vector>
using namespace std;
int solution(string t, string p) {
int answer = 0;
vector<string> v;
for (int i = 0; i < t.size()-p.size()+1; i++)
{
v.push_back(t.substr(i, p.size()));
}
for (auto i : v)
{
int x = stoll(i);
if(i<=p) answer++;
}
return answer;
}
string **substr** (size_t pos, size_t len)
- stoll() : 문자열(string)을 long long 형식으로 변환하는 역할을 합니다.
int solution(string t, string p) {
int answer = 0;
for (int i = 0; i <= t.size() - p.size(); i++){
if (stol(p) >= stol(t.substr(i, p.size()))){
answer++;
}
}
return answer;
}
문제 설명
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
제한 조건
phone_number는 길이 4 이상, 20이하인 문자열입니다.
입출력 예
phone_number return
"01033334444" "*******4444"
"027778888" "*****8888"
#include <string>
using namespace std;
string solution(string phone_number) {
for(int i = 0; i<phone_number.size()-4;i++)
{
phone_number[i]='*';
}
return phone_number;
}
#include <string>
using namespace std;
string solution(string phone_number) {
string answer = phone_number;
for (int i = 0; i < answer.size() - 4; i++) {
answer.replace(i, 1, "*");
}
return answer;
}
replace(size_t pos, size_t count, const string& str)
- pos: 대체를 시작할 위치를 나타내는 인덱스입니다.
- count: 대체할 문자의 수를 나타냅니다.
- str: 대체할 문자열로, 이 문자열이 대상 문자열에 삽입됩니다.
using ULL = unsigned long long;
ULL num =