머쓱이는 할머니께 생신 축하 편지를 쓰려고 합니다. 할머니가 보시기 편하도록 글자 한 자 한 자를 가로 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에 포함되는 것만 남기고 포함안되는 건 필터링한 후의 배열 길이를 구했다.