프론트엔드✏️/코드캠프

알고리즘 - 신규 아이디 추천 replace, slice, concat,

당근먹는하니 2022. 6. 29. 18:40
728x90
반응형
const yes = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p","q", "r","s","t","u","v","x","y","z","0","1","2","3","4","5","6","7","8","9","0","-","_","."];
function solution(new_id) {
    var answer = '';
  console.log(new_id.toLowerCase());
  let id = "";
  new_id = new_id.toLowerCase();
  for(let i = 0; i < new_id.length; ++i) {
    if(yes.includes(new_id[i])) {
      id+=new_id[i]
    } 
  }
    console.log(id)
}

solution("...!@BaT#*..y.abcdefghijklm")

못 풀었다..ㅠㅠ !!!~~~ ..을 제거하는 것부터 못했다. 

오늘 팀플 회의도 하고 알고리즘 테스트 있어서 시간이 나지 않기도 했다,,, 

// 멘토님 풀이
const filter = 'qwertyuiopasdfghjklzxcvbnm1234567890-_.';

function solution(new_id) {
    // 1단계 : 모든 소문자를 대응되는 대문자로 치환
    new_id = new_id.toLowerCase();
    
    // 2단계 : 소문자, 숫자, 빼기, 밑줄, 마침표 제외한 모든 문자를 제거
    let answer = "";
    for(let i =0; i< new_id.length; i++) {
        if(filter.includes(new_id[i])) {
            answer += new_id[i]
        }
    }
    
    // 3단계 : 마침표(.)가 2번 이상 연속된다면 하나의 마침표로 치환
    while(answer.includes("..")) {
        answer = answer.replace("..", ".")
    }
    
    // 4단계 : 마침표(.)가 문자열 처음이나 끝에 위치한다면 제거한다. 
    if(answer[0]===".") {
        answer = answer.substring(1);
    }
    
    function removeLastDot() {
        if(answer[answer.length-1]===".") {
        answer = answer.substring(0, answer.length-1);
    }
    }
    
    removeLastDot();
    
    // 5단계 : 빈 문자열일 경우, "a"를 대입한다. 
    if(answer.length===0){
        answer = "a";
    }
    
    // 6단계 : 문자열의 길이가 16자 이상이라면, 15자까지 자른다. 
    //        제거한 후, 마침표가 문자열 끝에 위치한다면 제거한다. 
    if(answer.length>=16) {
        answer = answer.substring(0, 15);
        removeLastDot();
    }
    
    // 7단계 : 문자열의 길이가 2글자 이하라면, 마지막 글자를 3글자가 될 때까지 붙여준다.
    if(answer.length <= 2) {
        const lastStr = answer[answer.length-1]; // 담아서 이걸 붙여준다.
        // 붙일 때 padEnd를 붙이면 되겠지!!!
        
        answer = answer.padEnd(3, lastStr);
    }
    return answer;
}

 

 

// 메서드로 풀기!
const filter = 'qwertyuiopasdfghjklzxcvbnm1234567890-_.';

function solution(new_id) {
    // 1단계 : 모든 소문자를 대응되는 대문자로 치환
    new_id = new_id.toLowerCase();
    
    // 2단계 : 소문자, 숫자, 빼기, 밑줄, 마침표 제외한 모든 문자를 제거
    let answer = new_id.filter((str,i)=> {
        return filter.includes(str);
    });
    
    // 3단계 : 마침표(.)가 2번 이상 연속된다면 하나의 마침표로 치환
    answer = answer.filter(str => {
        console.log(str, answer[i+1]) // 현재 데이터, 그 뒤에 데이터
        return str !== "."||(str==="."&&answer[i+1]!=="."); // 마침표가 아닐때만 거른다. 
    })
    
    // 4단계 : 마침표(.)가 문자열 처음이나 끝에 위치한다면 제거한다. 
    if(answer[0]===".") {
        // answer.shift();
        answer = answer.slice(1) // answer.shift()
    }
    
    const removeLastDot = () => {
        if(answer[answer.length-1]===".") {
        answer.pop();
        }
    }
    removeLastDot();
    // 5단계 : 빈 배열일 경우, "a"를 대입한다. 
    if(answer.length===0) {
        answer.push("a");
    }
    
    // 6단계 : 문자열의 길이가 16자 이상이라면, 15자까지 자른다. 
    //        제거한 후, 마침표가 문자열 끝에 위치한다면 제거한다. 
    if(answer.length >= 16) {
        answer = answer.slice(0, 15)
        removeLastDot();
    }
    
    // 7단계 : 문자열의 길이가 2글자 이하라면, 마지막 글자를 3글자가 될 때까지 붙여준다.
    if(answer.length<=2) {
        const add = new Array(3-answer.length)
                    .fill(answer[answer.length-1]);
        answer = [...answer, ...add];
    }
    return answer.join("");
}

arr = [];

arr[1] = 1; 

 

arr[0] 은 undefined임

그래서 비었는지 확인할 때는 arr.length로 확인한다. 

728x90
반응형