[알고리즘]프로그래머스 0단계 뽀개기(Day15)

HIHI JIN·2023년 3월 4일
0

알고리즘

목록 보기
17/29
post-thumbnail

Day 15

영어가 싫어요

영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.

//내 코드
function solution(numbers) {
    const a = [ "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
     /*
     for(let i=0; i<a.length; i++){
        numbers = numbers.replace(a[i], i);
    }
    */
    numbers = numbers.replace(/zero/g, 0);
    numbers = numbers.replace(/one/g, 1);
    numbers = numbers.replace(/two/g, 2);
    numbers = numbers.replace(/three/g, 3);
    numbers = numbers.replace(/four/g, 4);
    numbers = numbers.replace(/five/g, 5);
    numbers = numbers.replace(/six/g, 6);
    numbers = numbers.replace(/seven/g, 7);
    numbers = numbers.replace(/eight/g, 8);
    numbers = numbers.replace(/nine/g, 9);
    return Number(numbers);
}
//replace를 이용해 문자열에 해당 알파벳이 있으면 숫자로 바뀌도록 했다.
//반복문으로 코드를 줄여보고자 했으나 오류가 떠서 하나하나 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);
}
//eplace 두번째 인자로 함수를 전달할 수 있다.
//객체의 키값을 이용하여, 문자열의 첫번째 문자가 /zero|one|two|three|four|five|six|seven|eight|nine/g 여기 중 해당이 된다면 그 요소v를 객체의 v키값으로 바꾼다.

//또 다른 사람 코드
function solution(numbers) {
    const number = ["zero","one","two","three", "four", "five", "six", "seven", "eight", "nine"]
    for(let i = 0 ; i<number.length; i++){
        numbers = numbers.split(number[i]).join(i)
    }
    return +numbers
}
//원래 내코드도 반복문으로 하려다가 실패했는데,
//이 코드는 numbers를 split으로 배열number의 요소를 기준으로 배열로 만든다. 그리고 숫자i를 기준으로 이어붙인다.
//number = "zeroone"이면 /number = ["","one"]/number="0one"
//+number은 문자형인 숫자를 숫자형으로 변환해준다.

인덱스 바꾸기

문자열 my_string과 정수 num1, num2가 매개변수로 주어질 때, my_string에서 인덱스 num1과 인덱스 num2에 해당하는 문자를 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.

//내 코드
function solution(my_string, num1, num2) {
    return my_string.split("").map((v,idx) => idx===num1 ? my_string[num2]:v && idx===num2 ? my_string[num1]:v).join("");
}
//map으로 요소의 인덱스가 num1인인경우 my_string[num2]로 바꾼다.

//다른 사람 코드
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('');
}
//구조분해할당으로, 배열안의 요소를 바꾸는 방법

한 번만 등장한 문자

문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.

//내 코드
function solution(s) {
    s = s.split("").sort();
    let a= [];
    let b= [];
    for(let i of s){
        if(a.includes(i)) b.push(i);
        else a.push(i);
    }
    for(let j of [...new Set(b)]){
        s = s.filter(v => v!==j);
    }
    return s.join("");
}
//s에서 하나씩 빼서 새로운 a배열에 push하는데, 요소가 이미 있으면 다른 b배열에 담기
//b배열 중에서도 중복되는 요소는 new Set으로 제거
//b배열에 있는 요소를 s에서 다 뺀다.

//다른 사람 코드
function solution(s) {
    let res = [];
    for (let c of s) if (s.indexOf(c) === s.lastIndexOf(c)) res.push(c);
    return res.sort().join('');
}
//indexOf는 문자열의 0번째 인덱스부터 검색해서 제일 처음 발견한 요소의 인덱스를 반환, 뒤에 똑같은 요소가 있어도 처음 요소의 인덱스만 반환
//lastIndexOf는 반대로 문자열의 마지막인덱스부터 검색해서 처음 찾은 요소의 인덱스만 반환
//요소가 중복되지 않고 하나라면 s.indexOf(c) === s.lastIndexOf(c)는 똑같은 값으로 나온다.
//중복된다면 같은 인덱스가 나올 수 없기 때문이다.
//같은 인덱스의 요소만 새로운 배열에 담아 정렬하고 배열의 요소를 다 붙여 문자열로 돌려준다.

약수 구하기

정수 n이 매개변수로 주어질 때, n의 약수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.

//내 코드
function solution(n) {
    var answer = [1];
    for(let i=2; i<=n; i++){
        if(n%i===0) answer.push(i);
    }
    return answer;
}
//약수는 i를 2부터 자기자신까지로 해서 n%i===0인것을 1부터 배열에 담는다.
profile
신입 프론트엔드 웹 개발자입니다.

0개의 댓글