문제
https://programmers.co.kr/learn/courses/30/lessons/72410
코딩테스트 연습 - 신규 아이디 추천
카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로
programmers.co.kr
풀이
따로 문제를 풀기위한 알고리즘을 요구하는 문제는 아니고 문자열 + 시뮬레이션(빡구현) 문제이다.
문제의 의도대로 스텝 하나하나 잘 따라가면 크게 어렵지는 않을 것이다.
풀면서 몇가지 주의할 점은 스텝을 밟으면서 문자열의 빈번한 삭제가 일어나는데 문자열이 비었는데 문자열을 참조하려는 경우가 종종 있어서 이 부분에 대해서 항상 문자열이 비었는지 체크해주고 비었으면 무시할 수 있도록 처리해주면 된다.
또한 필자처럼 문자열 접근으로 for문 + substring 메서드를 통한 문자열 삭제를 하게 된다면 참조하려는 문자열의 인덱스가 수시로 바뀌기 때문에 문자열을 삭제한 타이밍에는 인덱스를 하나 빼주고 for문을 돌 수 있도록 해주면 된다.
코드
import java.util.Locale;
class Solution {
public String solution(String new_id) {
String answer = "";
// step1
new_id = new_id.toLowerCase();
// step2
for(int i = 0; i < new_id.length(); i++) {
char c = new_id.charAt(i);
if(c == '.' || c == '-' || c == '_' || Character.isDigit(c) == true || Character.isLowerCase(c)) {
continue;
} else {
System.out.println(c);
new_id = new_id.substring(0,i) + new_id.substring(i+1);
i--;
}
}
// step3
for(int i = 0; i < new_id.length() - 1; i++) {
if(new_id.charAt(i) == '.' && new_id.charAt(i + 1) == '.') {
if(new_id.length() > 0) {
new_id = new_id.substring(0,i + 1) + new_id.substring(i+2);
i--;
}
}
}
// step4
if(new_id.length() > 0) {
if(new_id.charAt(0) == '.') {
new_id = new_id.substring(1);
}
}
if(new_id.length() > 0) {
if(new_id.charAt(new_id.length() - 1) == '.') {
new_id = new_id.substring(0, new_id.length() - 1);
}
}
// step5
if(new_id.length() == 0) {
new_id = "a";
}
// step6
if (new_id.length() >= 16) {
new_id = new_id.substring(0, 15);
if(new_id.charAt(new_id.length() - 1) == '.') {
new_id = new_id.substring(0, new_id.length() - 1);
}
}
// step7
if(new_id.length() <= 2) {
while (true) {
char c = new_id.charAt(new_id.length() - 1);
new_id += c;
if (new_id.length() == 3) {
break;
}
}
}
System.out.println(new_id);
answer = new_id;
return answer;
}
}
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 프로그래머스 Level3 정수 삼각형 Java (0) | 2022.05.06 |
---|---|
[프로그래머스] 프로그래머스 Level2 점프와 순간 이동 Java (0) | 2022.05.05 |
[프로그래머스] 프로그래머스 Level2 방문 길이 Java (0) | 2022.05.04 |
[프로그래머스] 프로그래머스 Level1 두 개 뽑아서 더하기 Java (0) | 2022.05.04 |
[프로그래머스] 프로그래머스 Level1 약수의 개수와 덧셈 Java (0) | 2022.05.04 |