TIL 59 day 프로그래머스

Winney·2021년 1월 9일
0
post-thumbnail

오늘은 문자열 문제를 포함한 몇 문제 풀어보았다.
그 중 문자열 문제들로 글을 작성해보았다.
처음 자바스크립트 배울 때 멘토님께서 실무에서는 문자열을 다룰기회가 많으니 어떤 식으로 활용할지 생각하면서 메소드를 익혀보라고 하셨던게 기억났다.
실제로 프로젝트 하면서 validation이라던가 받아 온 데이터를 정형한다던가 하는 문제로 문자열을 다룰 기회가 많아서인지 어느새 친숙해졌고 이번에 푼 문제가 대부분 문자열을 다루는 문제라 생각보다 어렵지 않았다. 정규식을 쓸까... 하는 부분도 있었지만 정규식 없이 푸는 방향으로 잡으면서 문제를 풀어보았다.

1. 핸드폰 번호 가리기

전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수 완성하기

  • s는 길이 4 이상, 20이하인 문자열
  • 입출력 예시 :
    phone_number => return
    01033334444 => ***4444
    027778888 => *8888

수정 전

function solution(phone_number) {
  const before = phone_number.slice(0,-4)
    var answer = '*'.repeat(before.length) + phone_number.slice(-4)
    return answer;
}

뒤의 slice(-4)를 먼저 생각하고 repeat을 작성하는 바람에 쓸데없는 변수 선언이 있었다.

수정 후

function solution(phone_number) {
    var answer = '*'.repeat(phone_number.length-4) + phone_number.slice(-4)
    return answer;
}

2. 문자열을 정수로 바꾸기

문자열 s를 숫자로 변환한 결과를 반환하는 함수

  • s의 길이는 1 이상 5이하입니다.
  • s의 맨앞에는 부호(+, -)가 올 수 있습니다.
  • s는 부호와 숫자로만 이루어져있습니다.
  • s는 0으로 시작하지 않습니다.
  • 입출력 예시 :
    '1234' => 1234
    '-1234'이면 -1234

    작성

    function solution(s) {
       var answer = +s;
       return answer;
    }
    프로젝트 할 때 정말 많이 써먹었던 방법이라 모를래야 모를 수가 없었다.
    이 방법을 쓸 때마다 자바스크립트 특징에 대해서 다시 한 번 생각하게 된다.

    3. 수박수박수박수박수박수?

    길이가 n이고, 수박수박수박수....와 같은 패턴을 유지하는 문자열을 리턴하는 함수
  • n은 길이 10,000이하인 자연수입니다.
  • 입출력 예시 :
    3 => '수박수'
    4 => '수박수박'

작성

function solution(n) {
    var answer = '';
    const string = '수박'
    answer = string.repeat(Math.floor(n/2) + n%2 === 0 ? '수' : '');
    return answer;
}

제일 처음에는 하드코딩을 한 부분이 2-3군데 있었는데 수정했다.
사실 지금도 하드코딩이 있고 썩 마음에 드는 풀이는 아니다.
문자가 3글자가 될 수도 있고 제출은 가능 했지만 모든 케이스를 만족하는 방법은 아니라고 생각한다.
const string = new String('수박'); 이걸 사용한 방법이 없을까 싶은데 어떤 글자가 와도 상관이 없는 방법을 모색해봐야겠다.

4. 같은 숫자는 싫어

배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수

  • 배열 arr의 크기 : 1,000,000 이하의 자연수
  • 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수
  • 입출력 예시 :
    [1,1,3,3,0,1,1] => [1,3,0,1],
    [4,4,4,3,3] => [4,3]

작성

function solution(arr){
    var answer = [];
    for(var i = 0; i < arr.length; i++){
        if(arr[i] !== arr[i + 1]) answer.push(arr[i]);        
    }
    return answer;
}

그냥 단순하게 for문을 사용해서 다음 요소와 비교하는 방법을 사용했다.
제일 처음 든 생각은 filter를 쓸 수 있지 않을까? 하는 생각이 들었는데 작성을 어떻게하지 고민하다가 떠오르지 않아서 for문을 사용했다.
하지만 역시 어디에나 능력자는 있는 법...

다른 분의 풀이

function solution(arr) {
  var answer = arr.filter((v, i) => v !== arr[i+1]);
  return answer;
}

이 풀이를 보고 놀랬다. 이렇게 간단하게 작성 할 수 있는 거였는데 내가 너무 생각이 많았었다는 걸 알았다.
가끔 이렇게 아이디어가 떠오르다가 말 때 스스로한테 실망하지만 생각의 가지를 쳐내고 아이디어를 완성시키는 연습이 더 필요할 것같다.

profile
프론트엔드 엔지니어

0개의 댓글