가쟤의 해변일기 🐳

프로그래머스 JS 코테 1단계 - 푸드 파이트 대회 본문

코딩 테스트 in JS

프로그래머스 JS 코테 1단계 - 푸드 파이트 대회

바닷가쟤 2023. 10. 16. 22:25

푸드 파이트 대회

https://school.programmers.co.kr/learn/courses/30/lessons/134240

 

진짜 존잼 !!!!

아 오랜만에 코테 풀어보니까 넘무 재밌다

이제 슬슬 .. 1단계 벗어나서 2단계도 풀어야지. 하고서 정답률 낮은 1단계 문제 아무거나 눌러봤다가 10분 읽고 내가 할 수 없겠다 싶어서 적당히.. 낮은 문제를 골랐다..!!


문제 풀기 전에 어떻게 풀지 구상해두고 푸는 편인데, 역시 아날로그.. 손으로 써서 보는게 제일 편하다.

문제는 구상한대로 잘 풀렸다.

function solution(food) {
    const divide = food.map(item => Math.floor(item/2));
    let answer = ""
    
    for(let i = 0; i < food.length; i++) {
        let n = 0;
        while(n < divide[i]) {
            n++;
            answer += i; // 여기선 문자열로 출력을 하려 함.. 
        }
    }
        return answer
}

오우 !!! 여기까지 성공..

이게 이걸 뒤집은거를 만들어서 중간에 0을 끼워 넣을 것이다..! ㅎ

문자열을 배열로 바꿔주게 되었는데 이유는…

  1. 얕은 복사로 reverse하기 좋게
  2. 나중에 전개 연산자로 합치고 join하기 쉽게..!
function solution(food) {
    const divide = food.map(item => Math.floor(item/2));
    let left = []
    
    for(let i = 0; i < food.length; i++) {
        let n = 0;
        while(n < divide[i]) {
            n++;
            left.push(i);            
        }
    }
    
    const right = left.reverse();
    
    return [...left, 0, ...right]
}

.reverse()를 사용하려고 배열로 만들었다.

전개연산자로 메서드 없이 쉽게 붙였다. 이제 저 배열을 문자열로 합치기만 하면 된다.

function solution(food) {
    const divide = food.map(item => Math.floor(item/2));
    let left = []
    
    for(let i = 0; i < food.length; i++) {
        let n = 0;
        while(n < divide[i]) {
            n++;
            left.push(i);            
        }
    }
    
    const right = [...left].reverse();  // 얕은 복사 해야지 left값 유지
    
    const answer = [...left, 0, ...right];
    
    return answer.join("");
}

성공 !

오… 되게 좋은 문제였다!

728x90