[프로그래머스] 푸드 파이트 대회🤷‍♂️

최유나·2024년 7월 22일
0

프로그래머스

목록 보기
43/53

✨ 푸드 파이트 대회

나의 풀이

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('');
}


(출처 : )

0개의 댓글

관련 채용 정보