function sumTwoSmallestNumbers(numbers) {
const answerlist=[];
let answer =0;
for(let i=0;i<2;i++){
const minimum = Math.min.apply(null,numbers);
const minimumIdx = numbers.indexOf(minimum);
answer += minimum
numbers.splice(minimumIdx,1)
}
return answer
}
apply()
메서드를 통해 Math.min()
메서드를 사용하여 최솟값을 2번 찾아주는 과정이다. 찾을때마다 배열에서 제거해준다.
function sumTwoSmallestNumbers(numbers){
numbers = numbers.sort(function(a, b){return a - b; });
return numbers[0] + numbers[1];
};
되게 간단했다. 내 코드보다 훨씬 간결하다. 왜 이렇게 풀 생각을 못했나 싶다. 앞서 공부했던 sort()
메서드와 compareFunction
으로 오름차순으로 정렬후 0번 1번 인덱스값을 더한것이다.
function solution(number){
const numList= [];
for(let i=1;i<number;i++){
numList.push(i)
};
const answer = numList.reduce((acc,cur) => {
if ((Math.ceil(cur/3) === cur/3) || (Math.ceil(cur/5) === cur/5)){
return acc += cur
} else{
return acc
}
},0)
return answer
}
우선적으로 배열을 생성하고, reduce
를 통해 현재원소가 3또는 5로 나누어지면 더해준다. 멍청했던건, %
연산자가 생각이 안나서 저런식으로 했다는거다..
function solution(number){
var sum = 0;
for(var i = 1;i< number; i++){
if(i % 3 == 0 || i % 5 == 0){
sum += i
}
}
return sum;
}
굳이 내가 배열을 만들고시작하지 않았어도 됐을것 같다.
function pigIt(str){
const wordList = str.split(' ');
const answer = wordList.map(function (str) {
const wordArr = str.split('')
const firstWord= wordArr.shift()
if (!(str === "?" || str === "!")){
wordArr.push(firstWord)
return wordArr.join('') + "ay"
}else {
return str
}
})
return answer.join(' ')
}
문자열을 띄어쓰기단위로 쪼개고, map()
메서드를 통해 문자열의 앞문자를 뒤로 보내주고 "ay"를 붙여주는 함수를 적용했다. punctuationMark들을 정규표현식으로 필터링하려고했는데 안되서 그냥 ?,! 를 직접 걸렀다. 그후에 join()
메서드로 합쳐줬다.
function pigIt(str){
return str.replace(/(\w)(\w*)(\s|$)/g, "\$2\$1ay\$3")
}
우선 이 코드를 이해하기위해 정규표현식을 공부해야했다.
\w
는 영숫자 문자에 대응된다.
\w*
는 *
앞의 표현식이 0회이상 반복된다.
\s|$
에서 \s
는 스페이스,탭,줄바꿈문자등 공백문자에 대응하고, |
는 or의 의미이며, $
는 입력의 끝부분과 대응된다. 공백을 의미한다.
$1,$2,$3
은 탐색할 정규표현식에서 ()
로 묶어 구분한 1번,2번,3번 째 요소를 의미한다.
즉, 맨앞의문자와 나머지 문자열의 순서를 바꿔주고, 공백을 더해 영숫자 문자열만 replace 한다. 정말 천재적인 것 같다..