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

HIHI JIN·2023년 3월 4일

알고리즘

목록 보기
18/29
post-thumbnail

Day 16

편지

머쓱이는 할머니께 생신 축하 편지를 쓰려고 합니다. 할머니가 보시기 편하도록 글자 한 자 한 자를 가로 2cm 크기로 적으려고 하며, 편지를 가로로만 적을 때, 축하 문구 message를 적기 위해 필요한 편지지의 최소 가로길이를 return 하도록 solution 함수를 완성해주세요.

//내 코드
function solution(message) {
    return message.length*2;
}

가장 큰 수 찾기

정수 배열 array가 매개변수로 주어질 때, 가장 큰 수와 그 수의 인덱스를 담은 배열을 return 하도록 solution 함수를 완성해보세요.

//내 코드
function solution(array) {
    const max = Math.max(...array);
    return [max, array.indexOf(max)];
}

문자열 계산하기

my_string은 "3 + 5"처럼 문자열로 된 수식입니다. 문자열 my_string이 매개변수로 주어질 때, 수식을 계산한 값을 return 하는 solution 함수를 완성해주세요.

//내 코드
function solution(my_string) {
    var answer = 0; //초기 연산결과
    var newArr = my_string.split(" "); //공백제거
    var operator = "+"; //초기 연산자

    for(let i=0; i<newArr.length; i++){
        if(isNaN(Number(newArr[i]))){ //요소를 숫자형으로 변환할 때 null값이라면(=연산자라면)
            operator = newArr[i];   //연산자를 초기연산자+에서 요소로 바꾼다.
        } else { //요소가 숫자라면
            operator == "+" ? answer += parseInt(newArr[i]) : answer -= parseInt(newArr[i]);
        }//연산자가 +라면 초기연산결과에서 요소를 숫자형으로 바꾸어 더해준다.
        //연산자가 -라면 초기연산결과에서 요소를 숫자형으로 바꾸어 빼준다.
    }
    return answer; //연산결과를 반환
}
//연산자가 여러개 있을 수 있는 경우도 생각해야 한다. "1+2-3"
//반복문으로 요소가 연산자라면 연산자를 요소로 바꾸고
//요소가 숫자라면, 연산자가 +라면 초기값에서 요소를 더해주고, 연산자가 -라면 초기값에서 요소를 빼준다. 

/* 연산자가 1개라고 생각했을 때 처음 코드
if(my_string.includes("+")){
        const plus = my_string.split(" + ");
        return Number(plus[0]) + Number(plus[1]);
    }
    else{
        const minus = my_string.split(" - ");
        return Number(minus[0]) - Number(minus[1]);
    }
*/

//다른 사람 코드
function solution(my_string) {
    return (new Function ('return '+my_string))();
  	//return eval(my_string);
}
//eval( )는 문자로 표현된 코드를 실행하게 해주는 함수이다.
//또한, eval( ) 에는 여러 보안 이슈가 있기 떄문에 대체제로 new Function( ) 를 사용하는것을 매우 권장한다.
//new Function()는 문자열을 코드로 인식해 실행한다는 점에서 eval 함수와 비슷하다.
//하지만 new Function()은 함수 내부 Scope에만 접근과 수정이 가능하며
//내부에서 선언된 변수 등은 해당 Function 안에서만 유효하기 떄문에 eval과 같은 보안 이슈가 없다. 

//new Function()의 기본 문법
//let func = new Function ([arg1, arg2, ...argN], functionBody);
//let sum = new Function('a', 'b', 'return a + b'); // 기본 문법
//sum = new Function('a,b', 'return a + b'); // 쉼표로 구분
//sum = new Function('a , b', 'return a + b'); // 쉼표와 공백으로 구분
//alert(sum(1, 2)); // 3

배열의 유사도

두 배열이 얼마나 유사한지 확인해보려고 합니다. 문자열 배열 s1과 s2가 주어질 때 같은 원소의 개수를 return하도록 solution 함수를 완성해주세요.

//내 코드
function solution(s1, s2) {
    var answer = 0;
    for(let i of s1){
        if(s2.includes(i)) answer+=1;
    }
    return answer;
}
//반복문으로 s1의 요소가 s2에 포함된다면 answer+=1

//다른 사람 코드
function solution(s1, s2) {
    const intersection = s1.filter((x) => s2.includes(x));
    return intersection.length;
}
//s1의 요소x가 s2에 포함되는 것만 남기고 포함안되는 건 필터링한 후의 배열 길이를 구했다.
profile
신입 프론트엔드 웹 개발자입니다.

0개의 댓글