당근먹는하니
귀엽고 행복해
당근먹는하니
전체 방문자
오늘
어제
  • 분류 전체보기 (274)
    • 다람쥐🐿 (26)
    • C++ 공부빵야 (7)
    • 공부👻 (5)
    • 프론트엔드✏️ (228)
      • 코드캠프 (120)
      • 팀 프로젝트✨ (31)
      • 개인공부 (67)
    • 프론트엔드 - 바닐라js (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • JS
  • 코드캠프
  • 코딩 부트캠프
  • 회고
  • typescript
  • 알고리즘
  • 배포
  • emotion
  • ssg
  • next.js
  • 팀프로젝트
  • 팀플
  • 팀 프로젝트
  • React-hook-form
  • 공통 컴포넌트
  • 자바스크립트
  • javascript
  • 부트캠프
  • graphql
  • 코딩
  • algorithm
  • 리액트
  • CSS
  • 배열
  • react
  • refreshtoken
  • HTML
  • javascrpit
  • 프로그래머스
  • 프론트엔드

최근 댓글

최근 글

티스토리

250x250
반응형
hELLO · Designed By 정상우.
당근먹는하니

귀엽고 행복해

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

알고리즘 - 신규 아이디 추천 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
반응형
저작자표시 비영리 동일조건 (새창열림)

'프론트엔드✏️ > 코드캠프' 카테고리의 다른 글

Javascript vs TypeScript  (0) 2022.06.30
220629 프론트엔드 부트캠프 50일차 : 배포를 해보자!(3) - 동적 배포 실습  (0) 2022.06.30
220628 프론트엔드 부트캠프 49일차 : 배포를 해보자!(2) - 정적 배포 실습, refreshToken 권한분기, reactNative  (0) 2022.06.29
알고리즘 - [1차] 다트 게임  (0) 2022.06.28
HTTP와 HTTPS  (0) 2022.06.28
    '프론트엔드✏️/코드캠프' 카테고리의 다른 글
    • Javascript vs TypeScript
    • 220629 프론트엔드 부트캠프 50일차 : 배포를 해보자!(3) - 동적 배포 실습
    • 220628 프론트엔드 부트캠프 49일차 : 배포를 해보자!(2) - 정적 배포 실습, refreshToken 권한분기, reactNative
    • 알고리즘 - [1차] 다트 게임
    당근먹는하니
    당근먹는하니

    티스토리툴바