String을 이용한 구현문제였다. String에 대한 표준함수들을 많이 알 수록 이 문제를 더 쉽게 풀 수 있었던 것 같다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#include <string>
#include <vector>
#include <string>
#include <iostream>
using namespace std;
string my_lowcase(string s)
{
for(int i=0; i<s.size(); i++)
{
if (s[i] >= 'A' && s[i] <= 'Z')
s[i] += 32;
}
return s;
}
string solution(string new_id) {
string answer = my_lowcase(new_id);
for(int i=0; i<answer.size(); i++)
{
if ((answer[i] >= '0' && answer[i] <= '9') ||
(answer[i] >= 'a' && answer[i] <= 'z'))
continue;
if (answer[i] == '-' || answer[i] == '_' || answer[i] == '.')
continue;
answer.erase(i, 1);
i--;
}
for(int i=0; i<answer.size(); i++)
{
if (answer[i] == '.')
{
int j = i + 1;
while (answer[j] == '.')
j++;
if (j - i >= 2)
{
answer.erase(i + 1, j - i - 1);
}
}
}
if (answer.front() == '.') answer.erase(answer.begin());
if (answer.back() == '.') answer.pop_back();
if (answer.size() == 0) answer += "a";
if (answer.size() >= 16) answer = answer.substr(0, 15);
if (answer.back() == '.') answer.pop_back();
if (answer.size() <= 2)
{
string tmp = "";
tmp += answer.back();
while (answer.size() < 3)
answer += tmp;
}
return answer;
}
|
cs |
string도 vector와 비슷하게 front, back, pop_back 등을 사용할 수 있고 substr이나 erase함수는 어떻게 사용하는 지 알아두면 다양한 문제에 사용할 수 있을 것 같다.
단, erase를 쓰게 될 경우 반복문 내에서 iterator를 신경써줘야 할 수도 있기 때문에 웬만하면 erase를 적게 쓰는 방향으로 코드를 만들어야 좋다.
'Study > Programmers' 카테고리의 다른 글
프로그래머스 - 문자열 압축(2020 KAKAO BLIND RECRUITMENT) (0) | 2021.04.19 |
---|---|
프로그래머스 - 메뉴 리뉴얼(2021 KAKAO BLIND RECRUITMENT) (0) | 2021.04.16 |
프로그래머스 - 합승 택시 요금(2021 KAKAO BLIND RECRUITMENT) (0) | 2021.04.15 |
프로그래머스 - 순위 (0) | 2021.04.15 |
프로그래머스 - 섬 연결하기 (0) | 2021.04.14 |