상세 컨텐츠

본문 제목

[CodeKata.js] repeat() / includes() / splice(indexOf활용) / join("")

codeKata

by 서울의볼 2024. 2. 12. 01:29

본문

전화번호 마지막 4자리 제외 *** 가리기

  • slice 이용해서 자르고, repeat 이용해서 가리고, concat 이용해서 붙이기
    function solution(phone_number) {
        const lastFourDigits = phone_number.slice(phone_number.length-4, phone_number.length)
        const answer = '*'.repeat(phone_number.length - 4).concat(lastFourDigits)
        return answer
    }​
    참고하기 좋은 답안:
    function hide_numbers(s){
        var result = "*".repeat(s.length - 4) + s.slice(-4);
        return result;
      }​
    이 문제에서 정규식을 쓴 모범 답안도 있었음:
    function hide_numbers(s){
      return s.replace(/\d(?=\d{4})/g, "*");
    }
    중요한 건 난 정규식이 뭔지 모름; 찾아보니 정규 표현식을 사용하면 복잡한 조건문이 아닌 한줄로 간단히 표시할 수 있다 함. 이건 javascript의 고유 문법이 아니고, 대부분의 프로그램 언어와 코드 에디터에 내장되어 있다 함.
    javascript의 경우 ES3부터 도입됐고, 문법의 경우 "/검색 패턴/플래그" 이런 식으로 구성됨.

    주로 사용되는 상황은 아래와 같음:
    1. text에서 원하는 특정 pattern을 찾을 때(전화번호/홈페이지 등)
    2. pattern을 다른 문자열로 변환
    3. 사용자가 입력한 데이터가 특정 pattern에 유효한지 유효성 검사 할 때 (email/비밀번호)

    더욱 디테일한 건 아래 링크에서 볼 수 있겠음:
    https://hajoung56.tistory.com/47

없는 숫자 더하기

  • 접근법은 알겠으나 실력미비로 온전히 구현하지 못한 문제:
    0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
    function solution(numbers) {
        let answer = 0;
    
        for(let i = 0; i <= 9; i++) {
            if(!numbers.includes(i)) answer += i;
        }
    
        return answer;
    }​


배열내 최소값 제거

  • 이 문제는 splice를 활용할 수도 있다는 점에 감명 받아 남겨둠:
    정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
    function solution(arr) {
        arr.splice(arr.indexOf(Math.min(...arr)),1);
        if(arr.length<1)return[-1];
        return arr;
    }​
     내 답:
    function solution(arr) {
    
        let min = Math.min(...arr);
    
        let newArr = arr.filter(num => num !== min);
        if (newArr.length === 0) {
            return [-1];
        };
    
        return newArr;
    }​
  • if든 for든 사용 후 함수를 닫기 전에 return을 써서 끝맺음을 해줘야 함 잊지마셈;;이건 내 답이 맘에 들어서 남김 // join할 때 유의할 것
    단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
    function solution(s) {
        let letter = s.split("");
        let index = s.length/2;
    
        if (index % 1 !== 0) {
            return letter[Math.floor(index)];
        } else {
            return [letter[index - 1], letter[index]].join("");
        }
    }​


수박수박수박수박수박수

  • 이 수박 문제도 내 답이 정석 같아서 기록용으로 올림. 수박이 increment하는 걸 구현하는 것임.
    길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.
    function solution(n) {    
        let result = "";
    
        for (let i = 0; i < n; i++) {
            if (i % 2 === 0) {
                result += "수";
            } else {
                result += "박";
            }
        }
    
        return result;
    }​
  • 아 한 가지, 당연 result는 선언해야겠쥬?

 

관련글 더보기