따로 filtering 하는 함수를 만들어서 적용하려고 했는데, Z가 여러개일 때 이전 값이 자꾸 제거가 안되는 문제가 생겼다.
ex)
"10 Z 20 Z 1" -> 1 이 되어야 하는데 20이랑 1이 출력됨.
"10 Z 20 Z" -> 0이 되어야 하는데 20이 출력됨.
function solution(s) {
let arr = s.split(" ");
function filtering(value){
let fromIndex = arr.indexOf("Z");
while(fromIndex != -1) {
return value !== arr[fromIndex] && value !== arr[fromIndex -1]
fromIndex = arr.indexOf("Z", fromIndex+1);
}
}
arr.includes("Z") === true ? arr.filter(filtering) : arr
return arr.map(n => Number(n)).reduce((acc,cur) => acc + cur)
}
splice( )를 이용하니 간단하게 해결되었다.
function solution(s) {
let a = s.split(" ");
while(a.includes("Z")){
a.splice(a.indexOf("Z")-1, 2)
}
return a.map(n => Number(n)).reduce((acc,cur) => acc + cur, 0)
}
split(" ")
: 공백 기준으로 자르기
includes(value)
: 특정 값을 포함하는지 확인(T/F)
splice(index,count)
: 특정 index부터 ~개 만큼 자르기
indexOf(value)
: 특정 값의 index를 반환
⚠️주의
reduce할 때
0
안적어주면 배열이 비어있을 때 오류가 나므로 0을 꼭 적어준다.
하나씩 길이를 세서 새로운 배열에 담아준다.
function solution(strlist) {
var answer = [];
strlist.map(item => answer.push(item.length));
return answer;
}
아래처럼 축약해도 된다.
function solution(strlist) {
return strlist.map(item => item.length);
}
Set을 통해 중복되는 요소를 제거하고 spread operator를 통해 배열로 바꾼 후 문자열로 바꾸어 주었다.
function solution(my_string) {
let arr = my_string.split('');
let set = new Set(arr);
let newArr = [...set];
return newArr.join('')
}
코드 축약 (split 하지 않고 바로 넣어도 됨)
function solution(my_string) {
return [...new Set(my_string)].join('');
}
⭐️ 중복 제거 하는 방법 3가지
- Set
- indexOf, filter
- forEach, includes
function solution(my_string) {
let arr = my_string.split('');
return arr.filter((element, index)
=> arr.indexOf(element) === index);
}
function solution(my_string) {
let arr = my_string.split('');
let answer = [];
return arr.forEach((element) =>
if(!arr.includes(element)) {
answer.push(element);
})
}
다양한 풀이가 가능하지만, 저번에 배운 구조분해를 이용해서 각 변의 길이를 구해주고 삼항연산자를 통해 삼각형이 될 수 있는지 판정했다.
function solution(sides) {
let [a, b, c] = sides.sort();
return a+b > c ? 1 : 2;
}