function solution(food) { // 인자,매개변수
let answer = '';
// [1(물), 3, 4, 6] 0[i]은 물
// console.log(food); 숫자 확인
// 반복 돌리기(for, map, reduce)
// String(n)명시적 형변환,(n+"")암시적 형변환
// repeat(); '문자열'을 주어진 횟수만큼 반복해 붙임
// reverse(); 뒤집기
// join(); 합치기
food.map((e,i) => {
if(e > 1) return answer += (i+'').repeat(e / 2);
// 배열 내장함수 map return 값 필수
//if(e > 1){ // 물은 빼야 하기 때문에 물이 1보다 작은 경우의 조건으로 필터링
//return answer += (i+'').repeat(e / 2);
//}
});
return answer = `${answer}0${[...answer].reverse().join("")}`;
// [...answer] 스프레드 연산자를 통해 얕은 복사(원본 안 건들게) 후 진행
}
console.log(solution([1,3,4,6]));
console.log(solution([1,7,1,2]));
map의 단점
: 배열 내장함수 map return 값 필수
map은 무조건 return 값을 통하여 식을 반환하는데,let foods = food.map()
이라고 선언할 시, 중간 if값을 지나 끝나는 값에도 return 값이 필요하며Template literals
안에서${달러}
를 사용 할 시에, ",,,2134,,111" 이러한 잘못 된 값이 나온다. 이때는 filter로 조건을 주는 방식을 바꾸어 해 보라고 하는데 아직 이것 까진 해결하지 못했다.
(출처 : Template literals)
(출처 : Array.prototype.map())
function solution(food) {
let res = '';
for (let i = 1; i < food.length; i++) {
res += String(i).repeat(Math.floor(food[i]/2));
}
return res + '0' + [...res].reverse().join('');
}
function solution(food) {
const [water, ...half] = food.reduce((a, c, i)=> {
a[i] = Math.trunc(c / 2);
return a;
}, [])
food = half.map((num, i) => Array.from({length: num}, _ => i + 1));
return food.flat().concat(0, ...food.reverse()).join('');
}