Level 0) 문자열, 해시, 배열, 수학

Doozuu·2023년 1월 12일
0

프로그래머스 (JS)

목록 보기
16/183

📌 문제 1. 영어가 싫어요

정해진 단어를 기준으로 자르는 것은 split()을 통해 할 수 있고, 숫자로 바꾸는 것은 join()을 통해 할 수 있다.

function solution(numbers) {
    let arr = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
    for(let i=0;i<arr.length; i++){
        numbers = numbers.split(arr[i]).join(i);
    }
    return Number(numbers);
}

객체로 풀 때는 정규표현식과 replace를 이용해 풀 수 있다.

function solution(numbers) {
    const obj = {
        zero: 0, one: 1, two: 2, three: 3, four: 4,
        five: 5, six: 6, seven: 7, eight: 8, nine: 9
    };

    const num = numbers.replace(/zero|one|two|three|four|five|six|seven|eight|nine/g, (v) => {
        return obj[v];
    });

    return Number(num);
}


📌 문제 2. 인덱스 바꾸기

arr[num1]과 arr[num2]를 바꾸기 위해

  1. arr[num1]의 값을 num에 저장해둔다.
  2. arr[num1]에 arr[num2] 값을 넣는다.
  3. arr[num2]에 num 값(기존의 arr[num1]값)을 넣어준다.

포인트!

arr[num1]을 새로운 변수에 따로 저장해두지 않으면 2번 과정에서 arr[num1] 값이 변경되어 있기 때문에 arr[num2]에 arr[num1]의 값을 넣을 수 없다.

function solution(my_string, num1, num2) {
   let arr = my_string.split('');
   let num = arr[num1];
    arr[num1] = arr[num2];
    arr[num2] = num;
    return arr.join('');
}

구조분해 응용

구조분해를 응용하면 위의 번거로운 과정없이 간단하게 바꿀 수 있다..!

function solution(my_string, num1, num2) {
    my_string = my_string.split('');
    [my_string[num1], my_string[num2]] = [my_string[num2], my_string[num1]];
    return my_string.join('');
}


📌 문제 3. 한 번만 등장한 문자 ⭐️

  1. 각 문자의 개수를 카운트하기 위해 문자열을 쪼개서 배열에 담아 forEach 반복문을 돌린다.
  2. 빈 object를 만들어 두어 배열의 각 요소를 key로 넣고, 각 key의 개수를 value로 넣어준다. (key가 이미 존재하면 value에 +1을 해주고 없으면 새로 만들어(0) +1 해준다.)
    ex) s = "hello"
    obj // {"h":1, "e":1, "l":2, "o":1}
  3. object의 key값들을 사전순으로 정렬하고 map을 통해 value가 1인 것들의 key들을 더해준다.
    참고) Object.keys( ) 는 object의 key들을 배열에 담아준다.
    ex) Object.keys(obj) // ["h", "e", "l", "o"]
function solution(s) {
    let obj = {};
    let answer = '';
    s.split('').forEach((x) => obj[x] = (obj[x] || 0) + 1);
    Object.keys(obj).sort().map(key => obj[key] === 1 ? answer+=key : "");
    return answer;
}

for of와 indexOf( )를 이용한 간단한 풀이

문자열의 각 요소에 대하여 반복문을 돌려 index를 순서대로 찾은 것과 역순으로 찾은 것이 일치하는 것을 배열에 담아준다.

  • 요소가 여러개 있으면 순서대로 찾을 때의 index와 역순으로 찾을 때의 index가 일치할 수 없기 때문에 요소가 하나가 있을 때만 일치하게 되고, 이를 이용해 개수가 하나만 있는 요소를 찾아내는 것!
    ex) s = "hello"
    l은 순서대로 찾았을 때 index가 2이고 역순으로 찾았을 때는 index가 1이된다.
function solution(s) {
    let res = [];
    for (let c of s) if (s.indexOf(c) === s.lastIndexOf(c)) res.push(c);
    return res.sort().join('');
}

⭐️ Object.keys(object)

: object의 key값들을 배열에 담아준다.

⭐️ array.indexOf(value)

: 주어진 값과 일치하는 값을 순서대로 탐색하여 최초로 마주치는 Index를 반환한다.

⭐️ array.lastIndexOf(value)

: 주어진 값과 일치하는 값을 역순으로 탐색하여 최초로 마주치는 Index를 반환한다.



📌 문제 4. 약수 구하기

반복문을 통해 나머지가 0인 수(약수)들을 구하여 배열에 담아준다.

function solution(n) {
    var answer = [];
    for(i=0;i<=n;i++){
        if(n % i === 0){
            answer.push(i);
        }
    }
    return answer;
}
profile
모든게 새롭고 재밌는 프론트엔드 새싹

0개의 댓글