오랜만에 PS 포스팅입니다.

요구조건을 그대로 따라하면 되는 간단한(?) 문제이지만 꽤 오래걸렸습니다. (Level1 문제이기 때문에 간단하다고 하겠습니다.)

특히 index를 통해 string에서 중간에 있는 문자열을 제거할 수 있는 메소드가 있다고 생각했는데 그런 메소드가 없어서 좀 까다로웠습니다.

코딩 테스트를 보다보면 문자열을 다루는 문제가 자주 나오는데 C++과 JavaScript 모두 문자열과 좀 친해져야겠다는 생각이 들었습니다.

문제설명

문제 링크

접근

  • 친절하게 어떻게 하면 된다고 설명이 되어 있습니다. 말하는 대로 따라하시면 됩니다.
  • 저는 단계별로 어디가 틀렸는지 쉽게 찾고 싶어서 매번 새로운 변수를 선언하여 이전 단계까지 완성된 값들을 대입해준 후 필요에 따라 확인했습니다.

코드

function solution(new_id) {
    var answer = '';
    // 1번 조건
    new_id = new_id.toLowerCase();
    
    // 2번 조건
    let str2 = '';
    for(let i = 0 ; i<new_id.length ; i++){
        const ascii = new_id.charCodeAt(i);
        if((ascii >= 97 && ascii <= 122) || (ascii >= 48 && ascii <= 57) || ascii === 45 || ascii === 46 || ascii === 95) str2 += new_id[i];
    }
    // 3번 조건
    let str3 = '';
    let count = 0, flag = 0;
    let start = [], end = [];
    for(let i = 0 ; i<str2.length ; i++){
        if(str2[i] === '.'){
            count++;
            if (count>=2) flag = 1;
        }
        else {
            if(count >= 2){
                start.push(i - count);
                end.push(i - 1);
            }
            count = 0;
            flag = 0;
        }
    }
    if(flag){
        start.push(str2.length - count);
        end.push(str2.length - 1);
    }
    let pointIdx = 0;
    for(let i = 0 ; i<str2.length ; i++){
        if(i > end[pointIdx]){
            if(pointIdx < start.length - 1) pointIdx++;
        }
        if(i === start[pointIdx]){
            str3 += '.';
        }
        if(i >= start[pointIdx] && i <= end[pointIdx]) continue;
        str3 += str2[i];
        
    }
    // 4번 조건
    let str4 = str3;
    if(str4[0] === '.') str4 = str4.slice(1);
    if(str4.endsWith('.')) str4 = str4.slice(0, str4.length - 1);
    
    // 5번 조건
    let str5 = str4;
    if(str5 === '') str5 += 'a';
    
    // 6번 조건
    let str6 = str5;
    if(str6.length >= 16) str6 = str6.slice(0, 15);
    if(str6.endsWith('.')) str6 = str6.slice(0, str6.length - 1);
    
    // 7번 조건
    let str7 = str6;
    if(str7.length <= 2){
        const t = str7[str7.length - 1];
        str7 = str7.padEnd(3, t);
    }
    
    answer = str7;
    return answer;
}