https://school.programmers.co.kr/learn/courses/30/lessons/72410
참고할만한 코드
아래에서는 STringBuilder를 사용안했는데 StringBuilder를 사용하여 가능.
또한 String에 String s += "123" 이런식으로 가능하다는 것을 생각. 중간에는 못넣지만.
중간에 넣고 시다면 stringbuilder를 사용해야겟지. insert(indexd, "123");
1. 대문자 -> 소문자 변경시 String.toLowerCase() 를 사용
2. 정규표현식 사용하여 각종문자삭제.(이건 좀 애매하네 그냥 delete로 가능)
3. substring 사용(0~15글자까지만 return)
4. String temp += temp.charAt() String에 + , append 방식으로 string을 컨트롤 가능.
class Solution {
public String solution(String new_id) {
String answer = "";
String temp = new_id.toLowerCase();
temp = temp.replaceAll("[^-_.a-z0-9]","");
System.out.println(temp);
temp = temp.replaceAll("[.]{2,}",".");
temp = temp.replaceAll("^[.]|[.]$","");
System.out.println(temp.length());
if(temp.equals(""))
temp+="a";
if(temp.length() >=16){
temp = temp.substring(0,15);
temp=temp.replaceAll("^[.]|[.]$","");
}
if(temp.length()<=2)
while(temp.length()<3)
temp+=temp.charAt(temp.length()-1);
answer=temp;
return answer;
}
}
문제푸는데 2시간정도 걸린것같습니다..
시간을 줄여야합니다.
이 문제는 완전한 구현과 문자열을 합친 문제입니다.
이 문제에서 기억해야할점
첫번쨰. fourthstep() 에서 논리 처리
4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
만약 "." 점 하나를 4단계에서 테스트합니다.
처음에 "." 이니 마침표를 제거합니다.
그 이후, replace_new_char_id(0)에 의해 " "가 되는데
이때 if(new_id_char[new_id_char.length-1] 은 new_id_char[-1]을 의미합니다.
if(new_id_char.length <= 0){ return 처리를합니다. }
public static void fourthstep(){
if(new_id_char.length <= 0){
return ;
}
if(new_id_char[0] == '.'){
replace_new_char_id(0);
}
System.out.println(new_id_char.length);
// . 하나가 주어졌을떄 위에서 .이 사라지게 되어 new_id_char.length 가 0이됩니다.
// new_id_char.length가 0 이라면 이상태에서 -1이 되면 new_id_char[-1]을 찾는것이므로 오류가 나게됩니다.
// new_id_char에 아무 문자도 없다면 중지시킵니다.
// 위에도 같이 처리합니다.
if(new_id_char.length <= 0){
return ;
}
// System.out.println(new_id_char[new_id_char.length-1]);
if(new_id_char[new_id_char.length-1] == '.'){
replace_new_char_id(new_id_char.length-1);
}
}
import java.util.*;
import java.io.*;
class Solution {
static char[] new_id_char;
public String solution(String new_id) {
//String new_id 를 char형으로 변환시킵니다.
new_id_char = new char[new_id.length()];
//char[] 배열에서는 length를 사용합니다.
for(int i=0;i<new_id_char.length;i++){
new_id_char[i] = new_id.charAt(i);
}
//1단계
firststep();
// print();
//2단계
secondstep();
// print();
//3단계
thirdstep();
// print();
//4단계
fourthstep();
// print();
//5단계
fifthstep();
// print();
//6단계
sixthstep();
// print();
//7단계
seventhstep();
// print();
String answer = "";
for(int i=0;i<new_id_char.length;i++){
answer += new_id_char[i];
}
return answer;
}
public static void firststep(){
for(int i=0;i<new_id_char.length;i++){
// System.out.println(new_id.charAt(i));
if(new_id_char[i] >= 'a' && new_id_char[i] <='z'){
continue;
}else if(new_id_char[i] >= 'A' && new_id_char[i] <= 'Z'){
new_id_char[i] += 'a' - 'A';
}
}
}
public static void secondstep(){
for(int i=0;i<new_id_char.length;i++){
if( (new_id_char[i] >= 'a' && new_id_char[i] <= 'z') || (new_id_char[i] >= '0' && new_id_char[i] <= '9') || (new_id_char[i] == '-') || ( new_id_char[i] == '_' ) || ( new_id_char[i] == '.') ){
continue;
}else{
replace_new_char_id(i);
i-=1;
}
}
}
public static void thirdstep(){
for(int i=0;i<new_id_char.length;i++){
if( i < new_id_char.length){
if( new_id_char[i] == '.'){
int index = i+1;
//replace_new_char_id(index)함수를 통해 저절로 '.'이 사라지면서 인덱스가 떙겨와지니
//while로 계속 돌리면됩니다.
while(true){
if(index < new_id_char.length){
if(new_id_char[index] == '.'){
replace_new_char_id(index);
}else{
break;
}
}
else{
break;
}
}
}
}
}
}
public static void fourthstep(){
if(new_id_char.length <= 0){
return ;
}
if(new_id_char[0] == '.'){
replace_new_char_id(0);
}
System.out.println(new_id_char.length);
// . 하나가 주어졌을떄 위에서 .이 사라지게 되어 new_id_char.length 가 0이됩니다.
// new_id_char.length가 0 이라면 이상태에서 -1이 되면 new_id_char[-1]을 찾는것이므로 오류가 나게됩니다.
// new_id_char에 아무 문자도 없다면 중지시킵니다.
// 위에도 같이 처리합니다.
if(new_id_char.length <= 0){
return ;
}
// System.out.println(new_id_char[new_id_char.length-1]);
if(new_id_char[new_id_char.length-1] == '.'){
replace_new_char_id(new_id_char.length-1);
}
}
public static void fifthstep(){
if(new_id_char.length == 0){
new_id_char = new char[1];
new_id_char[0] = 'a';
}
}
public static void sixthstep(){
if( new_id_char.length >= 16 ){
// System.out.println("it's better tahn 16");
char[] new_id_char_temp = new char[15];
for(int i=0;i<15;i++){
new_id_char_temp[i] = new_id_char[i];
}
//새로 선언을 안해주면 뒤에것까지 다 나오므로 아무의미없습니다.
new_id_char = new char[new_id_char_temp.length];
for(int i=0;i<new_id_char_temp.length;i++){
new_id_char[i] = new_id_char_temp[i];
}
if(new_id_char[14] == '.'){
replace_new_char_id(14);
}
}
}
public static void seventhstep(){
if(new_id_char.length <= 2){
//마지막문자를 가져옵니다.
//5단계로 인하여 7단계에는 문자열이비어있지 않습니다.
char new_id_char_lastword = new_id_char[new_id_char.length-1];
char[] new_id_char_temp = new char[3];
for(int i=0;i<new_id_char.length;i++){
new_id_char_temp[i] = new_id_char[i];
}
for(int i=new_id_char.length;i<3;i++){
new_id_char_temp[i] = new_id_char_lastword;
}
new_id_char = new char[3];
for(int i=0;i<3;i++){
new_id_char[i] = new_id_char_temp[i];
}
}
}
public static void replace_new_char_id(int index){
char[] tempchar = new char[new_id_char.length - 1];
for(int j=0;j<index;j++){
tempchar[j] = new_id_char[j];
}
for(int j=index;j<new_id_char.length - 1; j++){
tempchar[j] = new_id_char[j+1];
}
new_id_char = new char[tempchar.length];
for(int j=0;j<tempchar.length;j++){
new_id_char[j] = tempchar[j];
}
}
public static void print(){
for(int i=0;i<new_id_char.length;i++){
System.out.print(new_id_char[i]);
}
System.out.println();
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[카카오 기출 문제] 괄호 변환 - 레벨 2,구현 + 문자열 (0) | 2022.10.05 |
---|---|
[카카오 기출 문제] 크레인 인형뽑기 - 레벨 1, 구현 (0) | 2022.09.05 |
[카카오 기출 문제] 키패드 누르기 - 레벨 1, 구현 + 문자열 (0) | 2022.09.05 |
[카카오 기출 문제] 숫자 문자열과 영단어 - 레벨 1, 구현 + 문자열 (0) | 2022.09.04 |
[카카오 기출 문제] 신고 결과 받기 - 레벨 1, 구현 + 문자열 (0) | 2022.09.03 |