https://school.programmers.co.kr/learn/courses/30/lessons/72410
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
참고할만한 코드
아래에서는 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 |