개발공부 임고미

[프로그래머스] 연습문제 - 푸드 파이트 대회 본문

프론트엔드/알고리즘

[프로그래머스] 연습문제 - 푸드 파이트 대회

임고미 2022. 11. 9. 23:07
728x90
300x250

프로그래머스 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

알고리즘 공부를 시작하며.. 
어떤식으로 공부해보면 좋을지, 어떤식으로 정리할지 계획을 세워봤다. 

1. 목표는 내가 쓰고자 하는 로직을 글로 먼저 적어본뒤 코드로 그 플로우 그대로를 따라가는것!
2. 30분이상 고민하지 말고, 정답 찾아본 뒤 스스로 다시 풀어볼것 (다음날 한번 더!)
3. 성공했을시, 다른사람들의 풀이를 보고 배우고싶은 코드를 1개 이상 가져와 분석해보기! 


푸드 파이터 대회

    // 맨앞 물을 제외한 음식만 있는 배열을 만든다.
    // 각 음식이 홀수이면 -1 짝수면 그대로 둔다.
    // 남은수의 1/2만큼 각 숫자를 리핏해준다. 
    // 물과 리핏해준 함수를 뒤집어서(상대편도 적은 칼로리부터 먹으니까) 붙여준다.
    // 완성!

 코드

function solution(food) {
  // 맨앞 물을 제외한 음식만 있는 배열을 만든다.
    const foodList = food.filter((f, i) => i !== 0);
  // 각 음식이 홀수이면 -1 짝수면 그대로 둔다.
    const makeEvenFood =  foodList.map((f) => f%2 ? f-1 : f);
  // 남은수의 1/2만큼 각 숫자를 리핏해준다. 
    const availableFood = makeEvenFood.map((f, i) => String(i+1).repeat(f/2));
  // 물과 리핏해준 함수를 뒤집어서(상대편도 적은 칼로리부터 먹으니까) 붙여준다.
    const result = availableFood.concat([0]).concat(availableFood.reverse())
  // 완성!
    return result.join('');
}

코드 줄여보기

1. 음식만 있는 배열 생성 x
2. result영역 함수 안스고 spread문법 사용해보기

function solution(food) {
    const makeEvenFood =  food.map((f, i) => i > 0 &&  f%2 ? f-1 : f);
    const availableFood = makeEvenFood.map((f, i) => String(i).repeat(f/2));
    const result = [...availableFood,0,...availableFood.reverse()];
   
    return result.join('');
}

makeEvenFood와 availableFood 합쳐보기는.. 이식에서는 좀 우겨넣기같다.. 다른 코드들을 한번 살펴보기로 결심!

 

728x90
300x250
Comments