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();   
    }
    
}

 

+ Recent posts