신규 아이디 추천
https://school.programmers.co.kr/learn/courses/30/lessons/72410 (opens in a new tab)
풀이
이 문제에 관해서 글을 작성하는 이유는 내가 for 문을 여러번 돌리는 방향을 생각을 못했기 때문이다.
def solution(new_id):
# 1단계
new_id = new_id.lower()
# 2단계
answer = ''
for word in new_id:
if word.isalnum() or word in '-_.':
answer += word
# 3단계
while '..' in answer:
answer = answer.replace('..', '.')
# 4단계
answer = answer[1:] if answer[0] == '.' and len(answer) > 1 else answer
answer = answer[:-1] if answer[-1] == '.' else answer
# 5단계
answer = 'a' if answer == '' else answer
# 6단계
if len(answer) >= 16:
answer = answer[:15]
if answer[-1] == '.':
answer = answer[:-1]
# 7단계
if len(answer) <= 3:
answer = answer + answer[-1] * (3-len(answer))
return answer
Java 풀이
class Solution {
public String solution(String new_id) {
// 1단계
String answer = new_id.toLowerCase();
// 2단계
StringBuilder sb = new StringBuilder();
for(int i = 0; i < answer.length(); i++) {
Character c = answer.charAt(i);
Boolean a = Character.isLetterOrDigit(c);
Boolean b = c.equals('-') || c.equals('_') || c.equals('.');
if(a || b) {
sb.append(c);
}
}
answer = sb.toString();
// 3단계
while(answer.contains("..")) {
answer = answer.replace("..", ".");
}
// 4단계
if(answer.length() > 0) {
if(answer.charAt(0) == '.') {
answer = answer.substring(1, answer.length());
}
}
if(answer.length() > 0) {
if(answer.charAt(answer.length() - 1) == '.') {
answer = answer.substring(0, answer.length() - 1);
}
}
// 5단계
if(answer.length() == 0 || answer == null) {
answer = "aaa";
}
// 6단계
if(answer.length() >= 16) {
answer = answer.substring(0, 15);
if(answer.charAt(answer.length() - 1) == '.') {
answer = answer.substring(0, 14);
}
}
// 7단계
sb = new StringBuilder(answer);
char last = answer.charAt(answer.length() - 1);
while(sb.length() <= 2) {
sb.append(last);
}
answer = sb.toString();
return answer;
}
}