티스토리 뷰
https://programmers.co.kr/learn/courses/30/lessons/72410
[프로그래머스][C++][Java] 신규 아이디 추천
C++로 그냥 그대로 구현했다가 자바로 풀면 좀 편하지 않을까 했는데
정규표현식을 쓰면 완전 간단하게 나온다.
C++
#include <string>
using namespace std;
void level1(string &new_id) {
for (char &c : new_id) {
if ('A' <= c && c <= 'Z') {
c = c - 'A' + 'a';
}
}
}
void level2(string &new_id) {
for (int i = 0; i < new_id.length(); i++) {
if ('0' <= new_id[i] && new_id[i] <= '9') continue;
if ('A' <= new_id[i] && new_id[i] <= 'Z') continue;
if ('a' <= new_id[i] && new_id[i] <= 'z') continue;
if (new_id[i] == '-' || new_id[i] == '_' || new_id[i] == '.') continue;
new_id.erase(new_id.begin() + i);
i--;
}
}
void level3(string &new_id) {
for (int i = 0; i < new_id.length() - 1; i++) {
if (new_id[i] == '.' && new_id[i + 1] == '.') {
new_id.erase(new_id.begin() + i + 1);
i--;
}
}
}
void level4(string &new_id) {
if (!new_id.empty() && new_id.front() == '.') {
new_id.erase(new_id.begin());
}
if (!new_id.empty() && new_id.back() == '.') {
new_id.erase(new_id.end() - 1);
}
}
void level5(string &new_id) {
if (new_id.empty()) {
new_id.append("a");
}
}
void level6(string &new_id) {
if (new_id.length() >= 16) {
new_id.erase(new_id.begin() + 15, new_id.end());
}
if (!new_id.empty() && new_id.back() == '.') {
new_id.erase(new_id.end() - 1);
}
}
void level7(string &new_id) {
while (new_id.length() <= 2) {
new_id.push_back(new_id.back());
}
}
string solution(string new_id) {
level1(new_id);
level2(new_id);
level3(new_id);
level4(new_id);
level5(new_id);
level6(new_id);
level7(new_id);
return new_id;
}
Java
class Solution {
public String solution(String new_id) {
String answer = "";
// level1
new_id = new_id.toLowerCase();
// level2
for (int i = 0; i < new_id.length(); i++) {
char c = new_id.charAt(i);
if ('0' <= c && c <= '9') answer += c;
else if ('A' <= c && c <= 'Z') answer += c;
else if ('a' <= c && c <= 'z') answer += c;
else if (c == '-' || c == '_' || c == '.') answer += c;
}
// level3
while (answer.contains(".."))
answer = answer.replace("..", ".");
// level4
if (answer.startsWith("."))
answer = answer.substring(1);
if (answer.endsWith("."))
answer = answer.substring(0, answer.length() - 1);
// level5
if (answer.isEmpty())
answer = "a";
// level6
if (answer.length() >= 16) {
answer = answer.substring(0, 15);
if (answer.endsWith("."))
answer = answer.substring(0, answer.length() - 1);
}
// level7
if (answer.length() <= 2) {
char c = answer.charAt(answer.length() - 1);
while (answer.length() < 3)
answer += c;
}
return answer;
}
}
정규표현식
class Solution {
public String solution(String new_id) {
String answer = new_id.toLowerCase(); // 1
answer = answer.replaceAll("[^-_.a-z0-9]", ""); // 2
answer = answer.replaceAll("[.]{2,}", "."); // 3
answer = answer.replaceAll("^[.]|[.]$", ""); // 4
if (answer.isEmpty()) { // 5
answer += "a";
}
if (answer.length() >= 16) { // 6
answer = answer.substring(0, 15);
answer = answer.replaceAll("[.]$","");
}
if (answer.length() <= 2) { // 7
char c = answer.charAt(answer.length() - 1);
while (answer.length() < 3)
answer += c;
}
return answer;
}
}
'Problem Solving' 카테고리의 다른 글
[백준][C++] 21608 상어 초등학교 (0) | 2022.04.21 |
---|---|
[프로그래머스][C++][Java] 숫자 문자열과 영단어 (0) | 2022.03.14 |
[프로그래머스][C++] 멀쩡한 사각형 (0) | 2021.10.17 |
[프로그래머스][C++] 124 나라의 숫자 (0) | 2021.10.17 |
[leetcode][C++] rotate image (0) | 2021.10.16 |
댓글